10#include "TObjString.h"
11#include "TStopwatch.h"
42 tobjs[i][j] =
nullptr;
82 for (
int i = 0; i < maxkey; i++)
89 if ((key >=
lastkey) || (key < -1))
return kFALSE;
92 if (
strings[key][pp] ==
nullptr)
return kFALSE;
99 if ((key >=
lastkey) || (key < -1))
return nullptr;
109 Fatal(
"MakeParamDouble",
"PDATABASE_MAX_DOUBLE_PARAM reached");
113 Warning(
"MakeParamDouble",
"Value %s already exists", paramname);
123Int_t PDataBase ::MakeParamString(
const char* paramname,
const char* descr)
127 Fatal(
"MakeParamString",
"PDATABASE_MAX_STRING_PARAM reached");
131 Warning(
"MakeParamString",
"Value %s already exists", paramname);
140Int_t PDataBase ::MakeParamInt(
const char* paramname,
const char* descr)
146 Warning(
"MakeParamInt",
"Value %s already exists", paramname);
155Int_t PDataBase ::MakeParamTObj(
const char* paramname,
const char* descr)
161 Warning(
"MakeParamTObj",
"Value %s already exists", paramname);
170Int_t PDataBase ::GetParamDouble(
const char* paramname)
177Int_t PDataBase ::GetParamString(
const char* paramname)
185Int_t PDataBase ::GetParamInt(
const char* paramname,
Int_t length)
199Int_t PDataBase ::GetParamTObj(
const char* paramname)
206Int_t PDataBase ::ConvertParamKey(
const char*& newparamname,
Int_t key)
212 for (
unsigned int i = 0; i < strlen(newparamname); i++) {
213 if (newparamname[i] ==
':') {
215 Warning(
"ConvertParamKey",
"Value %s for key %i not existing", newparamname, key);
218 newparamname = newparamname + i + 1;
226TString PDataBase ::GetDescription(
const char* paramname)
229 TString spattern(paramname);
230 TObjArray* array = spattern.Tokenize(TString(
":"));
233 for (
int pat = 0; pat < array->GetEntriesFast(); pat++) {
234 if (done) bla.Append(
"->");
235 TObjString* patoption = (TObjString*) (*array)[pat];
236 char* options = (
char*) patoption->GetString().Data();
257Bool_t PDataBase ::GetParamDouble(
Int_t key,
const char* paramname, Double_t** result)
262 const char* newparamname = paramname;
265 paramname = newparamname;
267 if (pp < 0)
return kFALSE;
269 if (
doubles[key][pp] ==
nullptr)
return kFALSE;
278 if (pkey < 0)
return kFALSE;
279 if (
doubles[key][pkey] ==
nullptr)
return kFALSE;
285Bool_t PDataBase ::GetParamString(
Int_t key,
const char* paramname,
const char** result)
290 const char* newparamname = paramname;
293 paramname = newparamname;
295 if (pp < 0)
return kFALSE;
297 if (
strings[key][pp] ==
nullptr)
return kFALSE;
306 if (pkey < 0)
return kFALSE;
307 if (
strings[key][pkey] ==
nullptr)
return kFALSE;
318 const char* newparamname = paramname;
322 paramname = newparamname;
324 if (pp < 0)
return kFALSE;
326 if (
ints[key][pp] ==
nullptr)
return kFALSE;
328 *result =
ints[key][pp];
336 if (pkey < 0)
return kFALSE;
337 if (
ints[key][pkey] ==
nullptr)
return kFALSE;
338 *result =
ints[key][pkey];
342Bool_t PDataBase ::GetParamTObj(
Int_t key,
const char* paramname, TObject** result)
347 const char* newparamname = paramname;
350 paramname = newparamname;
352 if (pp < 0)
return kFALSE;
354 if (
tobjs[key][pp] ==
nullptr)
return kFALSE;
356 *result =
tobjs[key][pp];
363 if (pkey < 0)
return kFALSE;
364 if (
tobjs[key][pkey] ==
nullptr)
return kFALSE;
365 *result =
tobjs[key][pkey];
370Bool_t PDataBase ::SetParamDouble(
Int_t key,
const char* paramname, Double_t* result)
374 cout <<
"PDataBase::SetParamDouble: key " << key <<
" not existing" << endl;
380 cout <<
"PDataBase::SetParamDouble: paramname " << paramname <<
" not existing" << endl;
388Bool_t PDataBase ::SetParamString(
Int_t key,
const char* paramname,
char* result)
392 Error(
"SetParamString",
"key %i not existing", key);
398 Error(
"SetParamString",
"paramname %s not existing", paramname);
410 Error(
"SetParamInt",
"key %i not existing", key);
416 Error(
"SetParamInt",
"paramname %s not existing", paramname);
420 ints[key][pp] = result;
424Bool_t PDataBase ::SetParamTObj(
Int_t key,
const char* paramname, TObject* result)
428 Error(
"SetParamTObj",
"key %i not existing", key);
434 Error(
"SetParamTObj",
"paramname %s not existing", paramname);
438 tobjs[key][pp] = result;
446 Error(
"SetParamTObj",
"key %i not existing", key);
450 tobjs[key][pp] = result;
454Int_t PDataBase ::GetEntry(
const char* name)
456 for (
int i = 0; i <
lastkey; i++) {
458 if (strcmp(name,
strings[i][0]) == 0)
return i;
464Int_t PDataBase ::GetEntryInt(
const char* paramname,
Int_t value)
467 for (
int i = 0; i <
lastkey; i++) {
469 if (*result == value)
return i;
486 for (
int i = 0; i <
lastkey; i++) {
488 if (*result == value) {
500 for (
int i = 0; i <
lastkey; i++) {
502 if (*result == value)
return i;
511 Warning(
"AddEntry",
"Key %i already existing", key);
515 Warning(
"AddEntry",
"An entry with name %s already exists", name);
524Int_t PDataBase ::AddEntry(
const char* name)
549 Warning(
"AddListEntry",
"Unable to get entry %s", name);
558 if (targetkey < 0) targetkey =
AddEntry(newname);
560 Warning(
"AddListEntry",
"Unable to name entry %s", newname);
566 i_count =
new Int_t(1);
568 i_link =
new Int_t(targetkey);
570 i_newlink =
new Int_t(key);
575 if (targetkey < 0) targetkey =
AddEntry(newname);
577 Warning(
"AddListEntry",
"Unable to name entry %s", newname);
585 Int_t listkey = -1, lastkey1 = -1;
593 i_newlink =
new Int_t(*i_link);
596 i_link =
new Int_t(targetkey);
602Bool_t PDataBase ::MakeListIterator(
Int_t key,
const char* count,
const char* link,
Int_t* listkey)
609 Int_t *i_count, *loc_listkey_p;
611 if (key == -1)
return kFALSE;
612 if (*listkey == -1) {
615 Warning(
"MakeListIterator",
"count %s not found", count);
620 Warning(
"MakeListIterator",
"link %s not found", link);
625 if (!
GetParamInt(*listkey, link, &loc_listkey_p))
return kFALSE;
628 *listkey = *loc_listkey_p;
629 if (*listkey == key) {
643 Int_t *i_count, *loc_listkey_p;
645 if (key == -1)
return kFALSE;
646 if (*listkey == -1) {
649 Warning(
"MakeListIterator",
"count %i not found", count);
654 Warning(
"MakeListIterator",
"link %i not found", link);
659 if (!
GetParamInt(*listkey, link, &loc_listkey_p))
return kFALSE;
662 *listkey = *loc_listkey_p;
663 if (*listkey == key) {
697 TString spattern(pattern);
698 TObjArray* array = spattern.Tokenize(TString(
","));
700 if (key >= 0) { start = end = key; }
701 for (
int run = 0; run < 2; run++) {
704 for (
int i = start; i <= end; i++) {
706 if (run && valid_key[i] > 0) {
709 if (i < 10) cout <<
" ";
710 if (i < 100) cout <<
" ";
711 if (i < 1000) cout <<
" ";
714 cout <<
"Database key=" << i << endl;
716 for (
int pat = 0; pat < array->GetEntriesFast(); pat++) {
720 cout <<
"PDataBase::listEntries: Too many pattern strings" << endl;
723 TObjString* patoption = (TObjString*) (*array)[pat];
724 char* options = (
char*) patoption->GetString().Data();
727 if (options[0] ==
'*') {
732 if (options[0] ==
'!') {
739 if (valid_key[i] > 0) {
741 if (option) cout << options <<
"=";
744 printf(
"%f", *result);
745 if (option) cout <<
" ";
751 size_t buf_size = 1000;
754 int results_length = snprintf(bla, buf_size - 1,
"%f", *result);
755 sz[i][pat] = results_length;
756 if (sz[i][pat] > max_sz[pat]) max_sz[pat] = sz[i][pat];
757 if (checkline && !invert) valid_key[i]++;
758 else if (invert && checkline)
765 if (valid_key[i] > 0) {
766 if (option) cout << options <<
"=";
769 printf(
"%i", *result3);
770 if (option) cout <<
" ";
776 size_t buf_size = 1000;
779 int result_length = snprintf(bla, buf_size - 1,
"%i", *result3);
780 sz[i][pat] = result_length;
781 if (sz[i][pat] > max_sz[pat]) max_sz[pat] = sz[i][pat];
782 if (checkline && !invert) valid_key[i]++;
783 else if (invert && checkline)
790 if (valid_key[i] > 0) {
791 if (option) cout << options <<
"=" << result2;
794 if (option) cout <<
" ";
800 sz[i][pat] = strlen(result2);
801 if (sz[i][pat] > max_sz[pat]) max_sz[pat] = sz[i][pat];
802 if (checkline && !invert) valid_key[i]++;
803 else if (invert && checkline)
810 if (valid_key[i] > 0) {
812 if (option) cout << options <<
"=<yes>";
815 if (option) cout <<
" ";
822 if (sz[i][pat] > max_sz[pat]) max_sz[pat] = sz[i][pat];
823 if (checkline && !invert) valid_key[i]++;
824 else if (invert && checkline)
832 if (option && run && valid_key[i] > 0) {
836 if (!ga) ga -= strlen(options) + 2;
837 for (
int x = ga;
x < max_sz[pat];
x++) {
843 if (run && valid_key[i] > 0) cout <<
"\n";
851void PDataBase ::Performance(
void)
856 Int_t mypid = 0, pid_param = 0, *i_result;
857 for (
int r = 0; r < 10000; r++)
858 for (
int i = 0; i < 50; i++) {
861 for (k = 0; (k < 50) && strcmp(
strings[i][0],
strings[k][0]); k++) {}
865 cout << timer.RealTime() << endl;
866 cout << mypid << endl;
871 for (
int r = 0; r < 10000; r++)
872 for (
int i = 0; i < 50; i++) {
876 cout <<
"PStaticData::ID: " << i <<
" not found" << endl;
881 cout << timer.RealTime() << endl;
882 cout << mypid << endl;
ClassImp(CbmConverterManager)
PDataBase * makeDataBase()
#define PDATABASE_MAX_INT_PARAM
#define PDATABASE_MAX_TOBJ_PARAM
#define PDATABASE_MAX_LINES
PDataBase * makeDataBase()
#define PDATABASE_MAX_STRING_PARAM
#define PDATABASE_MAX_DOUBLE_PARAM
const char * param_double_descr[PDATABASE_MAX_DOUBLE_PARAM]
Int_t MakeParamDouble(const char *paramname, const char *descr)
TObject * tobjs[PDATABASE_MAX_LINES][PDATABASE_MAX_TOBJ_PARAM]
Bool_t AddEntry(Int_t key, const char *name)
Int_t * param_int_key[PDATABASE_MAX_INT_PARAM]
void Print(const Option_t *delme) const
Double_t * doubles[PDATABASE_MAX_LINES][PDATABASE_MAX_DOUBLE_PARAM]
Int_t GetParamDouble(const char *paramname)
Int_t GetParamString(const char *paramname)
Int_t GetParamTObj(const char *paramname)
TString GetDescription(const char *paramname)
const char * param_string_descr[PDATABASE_MAX_STRING_PARAM]
const char * param_tobj_descr[PDATABASE_MAX_INT_PARAM]
const char * param_string_name[PDATABASE_MAX_STRING_PARAM]
void GetFastParamInt(const char *paramname, Int_t *pkey)
Int_t MakeParamString(const char *paramname, const char *descr)
const char * param_int_descr[PDATABASE_MAX_INT_PARAM]
Int_t GetEntry(const char *name)
const char * param_tobj_name[PDATABASE_MAX_INT_PARAM]
const char * strings[PDATABASE_MAX_LINES][PDATABASE_MAX_STRING_PARAM]
void SetFastKey(Int_t pkey, Int_t maxkey)
Int_t AddListEntry(const char *name, const char *count, const char *link, const char *newname)
Int_t param_int_key_max[PDATABASE_MAX_INT_PARAM]
Int_t param_double_pointer
Int_t * ints[PDATABASE_MAX_LINES][PDATABASE_MAX_INT_PARAM]
const char * GetName(Int_t key)
Bool_t CheckEntry(Int_t key)
Bool_t MakeListIterator(Int_t key, const char *count, const char *link, Int_t *listkey)
Int_t ConvertParamKey(const char *&newparamname, Int_t key)
const char * param_int_name[PDATABASE_MAX_INT_PARAM]
const char * param_double_name[PDATABASE_MAX_DOUBLE_PARAM]
Int_t GetParamInt(const char *paramname, Int_t length=-1)
Bool_t SetParamInt(Int_t key, const char *paramname, Int_t *result)
Int_t param_string_pointer