//___________________________________________________________________________________________ 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; }
//___________________________________________________________________________________________ TString KVValues::GetValueExpression(const Char_t* name) const { Int_t idx = GetValuePosition(name); return GetValueExpression(idx); }
//___________________________________________________________________________________________ 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; }
//___________________________________________________________________________________________ Double_t KVValues::GetValue(const Char_t* name) const { return GetValue(GetValuePosition(name)); }
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; }