//
// TriStateBuffer
//
// Used to gate things onto busses (nodes).
//


#import "TriStateBuffer.h"


@implementation TriStateBuffer


- initNumBits:(int)nbits			// Number of bits.
	in:innode				// Node from which we take value.
	out:outnode				// Node to take if signal is high.
	gate:gatenode				// 1-bit signal node.
{
    [super init];
    
    numbits = nbits;				// Remember the size.
    
    INITDEVTYPE("TriStateBuffer");
    
    TESTNODE("IN", innode, numbits);		// Make sure nodes are of correct sizes.
    TESTNODE("OUT", outnode, numbits);
    TESTNODE("GATE", gatenode, 1);
    
    IN = innode;				// Remember Nodes for later.
    OUT = outnode;
    GATE = gatenode;
    
    return self;
}


- cycle
{
    if(*([GATE getBits]))			// If GATE is high,
        [OUT setBits:[IN getBits]];		//   copy input to output.

    return self;
}


@end


//
// End of file.
//