bool FSMDirector_TransferInputs(struct FSMDirector* director, struct IOPort* port) { if (!port->isInput(port) /*|| !port->isOpaque(port)*/) { fprintf(stderr, "Attempted to transferInputs on a port is not an opaque input port."); exit(-1); } bool wasTransferred = false; PblMap* tokensIn = pblMapNewHashMap(); for (int i = 0; i < port->getWidth(port); i++) { if (i < port->getWidthInside(port)) { if (port->hasToken(port, i)) { Token* t = port->get(port, i); port->sendInside(port, i, t); pblMapAdd(tokensIn, &port, sizeof(struct IOPort*), t, sizeof(Token)); wasTransferred = true; } } else { if (port->hasToken(port, i)) { port->get(port, i); } } } if (wasTransferred) { director->transferModalInputs(tokensIn); } pblMapFree(tokensIn); return wasTransferred; }
bool FSMDirector_DirectorTransferModalOutputs1(struct FSMDirector* director, struct IOPort* port) { bool result = false; if (!port->isOutput(port) /*|| !port->isOpaque(port)*/) { fprintf(stderr, "Attempted to transferOutputs on a port that is not an opaque input port."); exit(-1); } PblMap* tokensOut = pblMapNewHashMap(); for (int i = 0; i < port->getWidthInside(port); i++) { if (port->hasTokenInside(port, i)) { Token* t = port->getInside(port, i); port->sendLocalInside(port, i, t); pblMapAdd(tokensOut, &port, sizeof(struct IOPort*), t, sizeof(Token)); result = true; } } if (result) { director->transferModalOutputs(tokensOut); } pblMapFree(tokensOut); return result; }
/* * Test frame for the map library * * this test frame calls the map library, * it does not have any parameters, it is meant for * debugging the map library */ int pblMap_TestFrame( int argc, char * argv[ ] ) { PblMap * map; int rc; char * data; map = pblMapNewTreeMap(); fprintf( stdout, "pblMapNewTreeMap() map = %p\n", map ); rc = pblMapIsEmpty( map ); fprintf( stdout, "pblMapIsEmpty( map ) rc = %d\n", rc ); rc = pblMapAddStrStr( map, "123", "123_1" ); fprintf( stdout, "pblMapAddStrStr( map, 123, 123_1 ) rc = %d\n", rc ); rc = pblMapContainsKeyStr( map, "123" ); fprintf( stdout, "pblMapContainsKeyStr( map, 123 ) rc = %d\n", rc ); rc = pblMapAddStrStr( map, "123", "123_2" ); fprintf( stdout, "pblMapAddStrStr( map, 123, 123_2 ) rc = %d\n", rc ); rc = pblMapContainsKeyStr( map, "123" ); fprintf( stdout, "pblMapContainsKeyStr( map, 123 ) rc = %d\n", rc ); rc = pblMapAddStrStr( map, "124", "124" ); fprintf( stdout, "pblMapAddStrStr( map, 124, 124 ) rc = %d\n", rc ); rc = pblMapContainsKeyStr( map, "124" ); fprintf( stdout, "pblMapContainsKeyStr( map, 124 ) rc = %d\n", rc ); rc = pblMapContainsKeyStr( map, "not there" ); fprintf( stdout, "pblMapContainsKeyStr( map, not there ) rc = %d\n", rc ); rc = pblMapContainsValueStr( map, "124" ); fprintf( stdout, "pblMapContainsValueStr( map, 124 ) rc = %d\n", rc ); rc = pblMapContainsValueStr( map, "not there" ); fprintf( stdout, "pblMapContainsValueStr( map, not there ) rc = %d\n", rc ); data = (char*)pblMapGetStr( map, "123" ); fprintf( stdout, "pblMapGetStr( map, 123 ) data = %s\n", data ); data = (char*)pblMapGetStr( map, "124" ); fprintf( stdout, "pblMapGetStr( map, 124 ) data = %s\n", data ); data = (char*)pblMapGetStr( map, "not there" ); fprintf( stdout, "pblMapGetStr( map, not there ) data = %p\n", data ); data = (char*)pblMapPutStrStr( map, "123", "123_3" ); fprintf( stdout, "pblMapPutStrStr( map, 123, 123_3 ) data = %s\n", data ); PBL_FREE(data); data = (char*)pblMapGetStr( map, "123" ); fprintf( stdout, "pblMapGetStr( map, 123 ) data = %s\n", data ); data = (char*)pblMapPutStrStr( map, "125", "125" ); fprintf( stdout, "pblMapPutStrStr( map, 125, 125 ) data = %p\n", data ); PBL_FREE(data); data = (char*)pblMapRemoveStr( map, "125" ); fprintf( stdout, "pblMapRemoveStr( map, 125 ) data = %s\n", data ); PBL_FREE(data); data = (char*)pblMapRemoveStr( map, "not there" ); fprintf( stdout, "pblMapRemoveStr( map, not there ) data = %p\n", data ); rc = pblMapSize( map ); fprintf( stdout, "pblMapSize( map ) rc = %d\n", rc ); rc = pblMapIsEmpty( map ); fprintf( stdout, "pblMapIsEmpty( map ) rc = %d\n", rc ); pblMapFree( map ); fprintf( stdout, "pblMapFree( map ) \n" ); return rc; }