make struct GENinstance truly generic

drop the GENnode struct member, which is actually part of
  the derived instance structs
This commit is contained in:
rlar 2018-01-08 21:38:46 +01:00
parent 315990688c
commit bc84b06b24
6 changed files with 20 additions and 9 deletions

View File

@ -21,10 +21,21 @@ struct GENinstance {
* current model*/
IFuid GENname; /* pointer to character string naming this instance */
int GENstate; /* state index number */
int GENnode[7]; /* node numbers to which this instance is connected to */
/* The actual devices have to place their node elements
* right after the the end of struct GENinstance
* where there can be accessed by generic GENnode()[]
* A notable exception is the XSPICE MIF device
*/
#if 0
int GENnode[]; /* node numbers to which this instance is connected to */
/* carefull, thats overlayed into the actual device structs */
#endif
};
static inline int *GENnode(struct GENinstance *inst)
{ return (int*)(inst + 1); }
/* per model data */

View File

@ -26,7 +26,7 @@ CKTinst2Node(CKTcircuit *ckt, void *instPtr, int terminal, CKTnode **node, IFuid
if (*(DEVices[type]->DEVpublic.terms) >= terminal && terminal > 0) {
/* argh, terminals are counted from 1 */
int nodenum = inst->GENnode[terminal - 1];
int nodenum = GENnode(inst)[terminal - 1];
for (here = ckt->CKTnodes; here; here = here->next)
if (here->number == nodenum) {

View File

@ -76,8 +76,8 @@ TFanal(CKTcircuit *ckt, int restart)
}
if (job->TFinIsI) {
ckt->CKTrhs[ptr->GENnode[0]] -= 1;
ckt->CKTrhs[ptr->GENnode[1]] += 1;
ckt->CKTrhs[GENnode(ptr)[0]] -= 1;
ckt->CKTrhs[GENnode(ptr)[1]] += 1;
} else {
insrc = CKTfndBranch(ckt, job->TFinSrc);
ckt->CKTrhs[insrc] += 1;
@ -119,8 +119,8 @@ TFanal(CKTcircuit *ckt, int restart)
/* now for input resistance */
if (job->TFinIsI) {
outputs[1] = ckt->CKTrhs[ptr->GENnode[1]] -
ckt->CKTrhs[ptr->GENnode[0]];
outputs[1] = ckt->CKTrhs[GENnode(ptr)[1]] -
ckt->CKTrhs[GENnode(ptr)[0]];
} else {
if(fabs(ckt->CKTrhs[insrc])<1e-20) {
outputs[1]=1e20;

View File

@ -26,7 +26,7 @@ CKTbindNode(CKTcircuit *ckt, GENinstance *instance, int term, CKTnode *node)
if (*(devs[type]->DEVpublic.terms) >= term && term > 0) {
/* argh, terminals are counted from 1 */
instance->GENnode[term - 1] = node->number;
GENnode(instance)[term - 1] = node->number;
return OK;
} else {
return E_NOTERM;

View File

@ -302,7 +302,7 @@ URCunsetup(GENmodel *inModel, CKTcircuit *ckt)
return E_NOMOD;
for (in = modfast->GENinstances; in; in = in->GENnextInstance)
CKTdltNNum(ckt, in->GENnode[0]);
CKTdltNNum(ckt, GENnode(in)[0]);
CKTdltMod(ckt, modfast); /* Does the elements too */

View File

@ -142,7 +142,7 @@ INP2M(CKTcircuit *ckt, INPtables *tab, card *current)
if (i < numnodes)
IFC (bindNode, (ckt, fast, i + 1, node[i]));
else
fast->GENnode[i] = -1;
GENnode(fast)[i] = -1;
PARSECALL ((&line, ckt, type, fast, &leadval, &waslead, tab));
if (waslead)