|
|
researchv10 Norman
#include <libc.h>
#include "crossbar.h"
Crossbar::Crossbar(char *dkname, int n, int depth)
{
dial = dkname;
nouts = n;
nwires = depth;
fd = -1;
nextc = 0;
imap = 0;
}
void
Crossbar::link(int ll, Crossbar *c, int l)
{
if(nextc)
fprint(2, "warning: redefining link from crossbar %s\n", dial);
froml = ll;
nextc = c;
nextl = l;
}
int
Crossbar::map(int input, Crossbar **cp, int *ip)
{
int i, *oip = ip;
if(fd < 0)
startup();
if(imap == 0)
config();
for(i = 0; i < nouts; i++)
if(imap[i] == input){
if(nextc && (i == froml)){
int k = nextc->map(nextl, cp, ip);
while(*cp)
cp++, ip++;
} else
*cp++ = this, *ip++ = i;
}
*cp = 0;
return(ip-oip);
}
void
Crossbar::startup()
{
fprint(2, "no startup defined!!\n");
abort();
}
void
Crossbar::config()
{
fprint(2, "no config defined!!\n");
abort();
}
int
Crossbar::connect(int, Crossbar *, int, int)
{
fprint(2, "no connect defined!!\n");
abort();
return(0);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.