Пример #1
0
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
Пример #2
0
// 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);
}