ZCsl::Variable::Variable (ZCsl * aParent, const ZString & aVarName, const ZString & aInitValue, ZBoolean aIsConst, ZBoolean aIsRef, ZBoolean aIsKnown, ZBoolean aIsExtern, Variable * aPrev): iIsConst (aIsConst), iIsKnown (aIsKnown && aIsConst), iIsExtern (aIsExtern), iIsGlobal (zFalse), iPrev (aPrev), iRef (0), iParent (aParent) { ZFUNCTRACE_DEVELOP ("ZCsl::Variable::Variable(...)"); iName = pureVarName (aVarName); const char *a = (const char *) aVarName + iName.length (); if (aIsRef) { iRef = iParent->iCalls->iPrev->findVar (aInitValue); // set up dimensions int refDims = iRef->dims () - _dims (aInitValue); int myDims = _dims (a); if (refDims != myDims) iParent->throwExcept (msgDimsMismatch, aVarName); int dim; for (dim = 0; dim < MAXDIMS; dim++) iDims[dim] = 0; for (dim = 0; dim < myDims; dim++) iDims[dim] = iRef->iDims[iRef->dims () - myDims + dim]; // get array offset iRef->match (aInitValue); iVals = &iRef->iVals[iRef->iIndex]; // set const & name iIsConst = iRef->iIsConst || aIsConst; } else { int dim; for (dim = 0; dim < MAXDIMS; dim++) iDims[dim] = 0; dim = 0; while (*a == '[' && dim < MAXDIMS) { a++; while ('0' <= *a && *a <= '9') { iDims[dim] = 10 * iDims[dim] + *a - '0'; a++; } if (*a++ != ']' || !iDims[dim++]) iParent->throwExcept (msgInvalidIndex, aVarName); } // while if (*a) iParent->throwExcept (msgInvalidIndex, aVarName); long sz = size (); iVals = new ZString[sz]; for (int i = 0; i < sz; i++) iVals[i] = aInitValue; } // if } // Variable
// Helper function CubeSignature::CubeSignature(const PAlgebra& alg): ndims(0) { Vec<long> _dims(INIT_SIZE, alg.numOfGens()); for (long i=0; i<(long)alg.numOfGens(); i++) _dims[i] = alg.OrderOf(i); initSignature(_dims); }