Exemplo n.º 1
0
//___________________________________________________________________________________________
Bool_t KVValues::Add(KVValues* val)
{
   if (this->GetNValues("base") != val->GetNValues("base")) return kFALSE;
   if (this->GetValue("MIN") > val->GetValue("MIN"))
      values[GetValuePosition("MIN")] = val->GetValue("MIN");
   if (this->GetValue("MAX") < val->GetValue("MAX"))
      values[GetValuePosition("MAX")] = val->GetValue("MAX");

   for (Int_t ii = kdeb; ii < this->GetNValues("base"); ii += 1) {
      values[ii] += val->GetValue(ii);
   }
   kTimesFillVarIsCalled += val->GetNumberOfFilling();
   return kTRUE;
}
Exemplo n.º 2
0
//___________________________________________________________________________________________
TString KVValues::GetValueExpression(const Char_t* name) const
{

   Int_t idx = GetValuePosition(name);
   return GetValueExpression(idx);
}
Exemplo n.º 3
0
//___________________________________________________________________________________________
KVNumberList* KVValues::TransformExpression(KVString& expr)
{

   KVNumberList* nl = new KVNumberList();

   const char* O = "[";
   const char* F = "]";

   KVString clone;
   clone.Form("%s", expr.Data());
   const char* expression = clone.Data();

   Int_t nouvert = 0, nferme = 0;
   Int_t posouvert = 0, posferme = 0;
   Int_t nvar = 0;

   Int_t nsize = clone.Length();
   for (Int_t ii = 0; ii <= nsize; ii += 1) {
      if (expression[ii] == O[0]) {
         nouvert += 1;
         posouvert = ii;
      }
      else if (expression[ii] == F[0]) {
         nferme += 1;
         posferme = ii;
         KVString st(clone(posouvert + 1, posferme - posouvert - 1));
         if (st.IsDigit()) {
            Int_t idx = st.Atoi();
            if (0 <= idx && idx < kval_tot) {
               nl->Add(idx);
               nvar += 1;
            }
            else {
               delete nl;
               return 0;
            }
         }
         else {

            Int_t idx = GetValuePosition(st.Data());
            if (idx == -1) {
               delete nl;
               return 0;
            }
            nl->Add(idx);
            nvar += 1;
            KVString s1;
            s1.Form("[%s]", st.Data());
            KVString s2;
            s2.Form("[%d]", idx);
            expr.ReplaceAll(s1, s2);
         }
      }
      else {}
   }

   if (nouvert != nferme || nvar != nouvert) {
      Error("TransformExpr", "nombre [ : %d - nombre de ] : %d - nombre de variables %d", nouvert, nferme, nvar);
   }

   return nl;

}
Exemplo n.º 4
0
//___________________________________________________________________________________________
Double_t KVValues::GetValue(const Char_t* name) const
{

   return GetValue(GetValuePosition(name));

}
Exemplo n.º 5
0
int ConfigRead(ConfigFileInfo *Info)
{
	int				NumOfRead	=	0;

	char			Buffer[3072];
	char			*ValuePos;
	ReadLineStatus	ReadStatus;

	char			KeyName[KEY_NAME_MAX_SIZE + 1];
	ConfigOption	*Option;

	while(TRUE){
		ReadStatus = ReadLine(Info -> fp, Buffer, sizeof(Buffer));
		if( ReadStatus == READ_FAILED_OR_END )
			return NumOfRead;

		if( GetKeyNameFromLine(Buffer, KeyName) == NULL )
			continue;

		Option = GetOptionOfAInfo(Info, KeyName);
		if( Option == NULL )
			continue;

		ValuePos = (char *)GetValuePosition(Buffer);
		if( ValuePos == NULL )
			continue;

		switch( Option -> Type )
		{
			case TYPE_INT32:
				switch (Option -> Strategy)
				{
					case STRATEGY_APPEND_DISCARD_DEFAULT:
						if( Option -> Status == STATUS_DEFAULT_VALUE )
						{
							Option -> Strategy = STRATEGY_APPEND;
						}
						/* No break */

					case STRATEGY_DEFAULT:
					case STRATEGY_REPLACE:
						sscanf(ValuePos, "%d", &(Option -> Holder.INT32));
						Option -> Status = STATUS_SPECIAL_VALUE;
						break;

					case STRATEGY_APPEND:
						{
							_32BIT_INT SpecifiedValue;

							sscanf(ValuePos, "%d", &SpecifiedValue);
							Option -> Holder.INT32 += SpecifiedValue;

							Option -> Status = STATUS_SPECIAL_VALUE;
						}
						break;

					default:
						continue;
						break;
				}
				break;

			case TYPE_BOOLEAN:
				switch (Option -> Strategy)
				{
					case STRATEGY_APPEND_DISCARD_DEFAULT:
						if( Option -> Status == STATUS_DEFAULT_VALUE )
						{
							Option -> Strategy = STRATEGY_APPEND;
						}
						/* No break */

					case STRATEGY_DEFAULT:
					case STRATEGY_REPLACE:

						Option -> Holder.boolean = GetBoolealValueFromString(ValuePos);

						Option -> Status = STATUS_SPECIAL_VALUE;
						break;

					case STRATEGY_APPEND:
						{
							BOOL SpecifiedValue;

							SpecifiedValue = GetBoolealValueFromString(ValuePos);
							Option -> Holder.boolean |= SpecifiedValue;

							Option -> Status = STATUS_SPECIAL_VALUE;
						}
						break;

						default:
							continue;
							break;

				}
				break;

			case TYPE_STRING:
				{
					char *result;

					switch (Option -> Strategy)
					{
						case STRATEGY_APPEND_DISCARD_DEFAULT:
							if( Option -> Status == STATUS_DEFAULT_VALUE )
							{
								Option -> Strategy = STRATEGY_APPEND;
							}
							/* No break */

						case STRATEGY_DEFAULT:
						case STRATEGY_REPLACE:
							if( Option -> Holder.str != NULL )
							{
								SafeFree(Option -> Holder.str);
							}

							result = SafeMalloc(strlen(ValuePos) + 1);
							if( result == NULL )
							{
								continue;
							}

							strcpy(result, ValuePos);
							Option -> Status = STATUS_SPECIAL_VALUE;
							break;

						case STRATEGY_APPEND:
							if( Option -> Holder.str != NULL )
							{
								result = SafeMalloc(strlen(Option -> Holder.str) + strlen(ValuePos) + 2);
								if( result == NULL )
								{
									continue;
								}
								strcpy(result, Option -> Holder.str);
								strcat(result, ",");
								strcat(result, ValuePos);
								SafeFree(Option -> Holder.str);
							} else {
								result = SafeMalloc(strlen(ValuePos) + 1);
								if( result == NULL )
								{
									continue;
								}
								strcpy(result, ValuePos);
							}
							Option -> Status = STATUS_SPECIAL_VALUE;
							break;

						default:
							continue;
							break;
					}

					while( ReadStatus != READ_DONE ){

						ReadStatus = ReadLine(Info -> fp, Buffer, sizeof(Buffer));
						if( ReadStatus == READ_FAILED_OR_END )
							break;
						if( SafeRealloc((void *)&result, strlen(result) + strlen(Buffer) + 1) != 0 )
							break;
						strcat(result, Buffer);
					}

					if( strlen(result) != 0 )
					{
						int loop = strlen(result) - 1;

						while( result[loop] == '\n' || result[loop] == '\r' )
						{
							result[loop] = '\0';
							--loop;
						}
					}

					Option -> Holder.str = result;
				}
				break;

			default:
				break;
		}
		++NumOfRead;
	}
	return NumOfRead;
}