/*** preinitBlock ***/ #define $actorSymbol(_order) $size(reflectionCoefficients) double $actorSymbol(_forward)[$actorSymbol(_order) + 1]; double $actorSymbol(_backward)[$actorSymbol(_order) + 1]; double $actorSymbol(_forwardCache)[$actorSymbol(_order) + 1]; double $actorSymbol(_backwardCache)[$actorSymbol(_order) + 1]; double $actorSymbol(_reflectionCoefficients)[$actorSymbol(_order)]; /**/ /*** sharedBlock ***/ double $actorClass(k); int $actorClass(i); /**/ /*** sharedArrayCopyBlock ***/ //super.arraycopyBlock(double); void $actorClass(arraycopy)(double *src, int srcPos, double *dest, int destPos, int length) { int i; for (i = 0; i < length; i++) { dest[destPos + i] = src[srcPos + i]; } } /**/ /*** prefireBlock ***/ $actorClass(arraycopy)($actorSymbol(_backward), 0, $actorSymbol(_backwardCache), 0, $actorSymbol(_order) + 1); $actorClass(arraycopy)($actorSymbol(_forward), 0, $actorSymbol(_forwardCache), 0, $actorSymbol(_order) + 1); /**/
/***preinitBlock***/ static int $actorSymbol(xvalue); /**/ /***initBlock***/ $actorSymbol(xvalue) = 0; /**/ /***plotBlock($channel)***/ //check with Ben to see how to do the file mapped i/o... I don't remember how it was done before printf("%d, %d",$actorSymbol(xvalue),$ref(input#$channel)); /**/ /***plotBlock1($channel)***/ //check with Ben to see how to do the file mapped i/o... I don't remember how it was done before printf("%d, %d",$actorSymbol(xvalue),$ref(input#$channel)); /**/ /***plotBlock2($channel)***/ //check with Ben to see how to do the file mapped i/o... I don't remember how it was done before printf("%d, %d",$actorSymbol(xvalue),$ref(input#$channel)); /**/
/***preinitBlock***/ FILE * $actorSymbol(filePtr); int $actorSymbol(charRead); int $actorSymbol(index); int $actorSymbol(length) = 128; /**/ /***initBufferBlock***/ $ref(output) = (char*) malloc($actorSymbol(length) * sizeof(char)); /**/ /***openForStdin***/ $actorSymbol(filePtr) = stdin; /**/ /***skipLine***/ // use fgetc() to readLine //$actorSymbol(charReturned) = fscanf($actorSymbol(filePtr), "%s", $actorSymbol(line)); while ( ($actorSymbol(charRead) = fgetc($actorSymbol(filePtr))) != '\n' && $actorSymbol(charRead) != EOF ); $ref(endOfFile) = feof($actorSymbol(filePtr) ); /**/ /***openForRead($fileName)***/ if (!($actorSymbol(filePtr) = fopen ("$fileName","r"))) { fprintf(stderr,"ERROR: cannot open file \"$fileName\" for LineReader actor.\n"); exit(1); } /**/ /***fireBlock***/
/*** preinitBlock ***/ $super() boolean $actorSymbol(haveNextNextGaussian) = false; double $actorSymbol(nextNextGaussian); double $actorSymbol(xRawNum); double $actorSymbol(yRawNum); /**/ /*** randomBlock ***/ $actorSymbol(xRawNum) = RandomSource_nextGaussian(&$actorSymbol(seed), &$actorSymbol(haveNextNextGaussian), &$actorSymbol(nextNextGaussian)); $actorSymbol(yRawNum) = RandomSource_nextGaussian(&$actorSymbol(seed), &$actorSymbol(haveNextNextGaussian), &$actorSymbol(nextNextGaussian)); $ref(output) = sqrt(pow( ($actorSymbol(xRawNum) * $val(standardDeviation)) + $val(xMean), 2) + pow(($actorSymbol(yRawNum) * $val(standardDeviation)) + $val(yMean), 2)); /**/
// The algorithm of generating the random number with Gaussian distribution // is based on source code from Java.util.Random. Given the same seed, it // generates the same list of random numbers as the java.util.Random object. /*** preinitBlock ***/ double $actorSymbol(seed); boolean $actorSymbol(haveNextNextGaussian) = false; double $actorSymbol(nextNextGaussian); /**/ /*** randomBlock ***/ $ref(output) = (RandomSource_nextGaussian(&$actorSymbol(seed), &$actorSymbol(haveNextNextGaussian), &$actorSymbol(nextNextGaussian)) * $val(standardDeviation)) + $val(mean); /**/
double DiscreteRandomSource_rand(double* seed, Token pmf, Token values) { int i; double randomValue; double cdf = 0.0; // Generate a double between 0 and 1, uniformly distributed. randomValue = RandomSource_nextDouble(seed); for (i = 0; i < pmf.payload.Array->size; i++) { cdf += Array_get(pmf, i).payload.Double; if (randomValue <= cdf) { return Array_get(values, i).payload.Double; } } // We shouldn't get here, but if we do, we output the last value. return Array_get(values, pmf.payload.Array->size - 1).payload.Double; } /**/ /*** initBlock ***/ // convert all the values to type double. $ref(values) = $typeFunc(TYPE_Array::convert($ref(values), TYPE_Double)); /**/ /*** randomBlock ***/ $ref(output) = DiscreteRandomSource_rand(&$actorSymbol(seed), $ref(pmf), $ref(values)); /**/
/*** preinitBlock ***/ int $actorSymbol(i); int $actorSymbol(M); double $actorSymbol(k); int $actorSymbol(_valueLength); double* $actorSymbol(_backward); double* $actorSymbol(_backwardCache); double* $actorSymbol(_forward); double* $actorSymbol(_forwardCache); int $actorSymbol(_blockSizeValue); /**/ /*** initBlock ***/ $actorSymbol(_valueLength) = $ref(reflectionCoefficients).payload.Array->size; $actorSymbol(_backward) = (double*) malloc(($actorSymbol(_valueLength) + 1) * sizeof(double)); $actorSymbol(_backwardCache) = (double*) malloc(($actorSymbol(_valueLength) + 1) * sizeof(double)); $actorSymbol(_forward) = (double*) malloc(($actorSymbol(_valueLength) + 1) * sizeof(double)); $actorSymbol(_forwardCache) = (double*) malloc(($actorSymbol(_valueLength) + 1) * sizeof(double)); $actorSymbol(_blockSizeValue) = $val(blockSize); if ($actorSymbol(_blockSizeValue) < 1) { fprintf(stderr, "Invalid blockSize: %d,", $actorSymbol(_blockSizeValue)); exit(1); } for ($actorSymbol(i) = 0; $actorSymbol(i) < $actorSymbol(_valueLength) + 1; $actorSymbol(i)++) { $actorSymbol(_forward)[$actorSymbol(i)] = 0; $actorSymbol(_backward)[$actorSymbol(i)] = 0; } /**/