Пример #1
0
void qspMoveVar(QSPVar *dest, QSPVar *src) {
  dest->Values = src->Values;
  dest->ValsCount = src->ValsCount;
  dest->Indices = src->Indices;
  dest->IndsCount = src->IndsCount;
  dest->IndsBufSize = src->IndsBufSize;
  qspInitVarData(src);
}
Пример #2
0
void qspClearVars(QSP_BOOL isFirst) {
  int i;
  QSPVar *var = qspVars;
  for (i = 0; i < QSP_VARSCOUNT; ++i) {
    if (isFirst)
      qspInitVarData(var);
    else {
      if (var->Name)
        free(var->Name);
      qspEmptyVar(var);
    }
    var->Name = nullptr;
    ++var;
  }
}
Пример #3
0
void qspEmptyVar(QSPVar *var) {
  int count;
  if (var->Values) {
    count = var->ValsCount;
    while (--count >= 0)
      if (var->Values[count].Str)
        free(var->Values[count].Str);
    free(var->Values);
  }
  if (var->Indices) {
    count = var->IndsCount;
    while (--count >= 0)
      free(var->Indices[count].Str);
    free(var->Indices);
  }
  qspInitVarData(var);
}
Пример #4
0
static void qspCopyVar(QSPVar *dest, QSPVar *src, int start, int count)
{
	QSP_CHAR *str;
	int i, maxCount, newInd;
	if (start < 0) start = 0;
	maxCount = src->ValsCount - start;
	if (count <= 0 || maxCount <= 0)
	{
		qspInitVarData(dest);
		return;
	}
	if (count < maxCount) maxCount = count;
	dest->ValsCount = maxCount;
	dest->Values = (QSPVarValue *)malloc(maxCount * sizeof(QSPVarValue));
	for (i = 0; i < maxCount; ++i)
	{
		dest->Values[i].Num = src->Values[i + start].Num;
		str = src->Values[i + start].Str;
		dest->Values[i].Str = (str ? qspGetNewText(str, -1) : 0);
	}
	dest->IndsBufSize = 0;
	dest->Indices = 0;
	count = 0;
	for (i = 0; i < src->IndsCount; ++i)
	{
		newInd = src->Indices[i].Index - start;
		if (newInd >= 0 && newInd < maxCount)
		{
			if (count >= dest->IndsBufSize)
			{
				dest->IndsBufSize = count + 16;
				dest->Indices = (QSPVarIndex *)realloc(dest->Indices, dest->IndsBufSize * sizeof(QSPVarIndex));
			}
			dest->Indices[count].Index = newInd;
			dest->Indices[count].Str = qspGetNewText(src->Indices[i].Str, -1);
			++count;
		}
	}
	dest->IndsCount = count;
}