00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "RooFit.h"
00026
00027 #include "RooList.h"
00028 #include "RooList.h"
00029 #include "RooMsgService.h"
00030
00031 #include "Riostream.h"
00032
00033 ClassImp(RooList)
00034
00035
00036
00037
00038 TObjOptLink *RooList::findLink(const char *name, const char *caller) const
00039 {
00040
00041
00042
00043
00044
00045 if(0 == strlen(name)) return 0;
00046 TObjLink *link = FirstLink();
00047 while (link) {
00048 TObject *obj= link->GetObject();
00049 if (obj->GetName() && !strcmp(name, obj->GetName())) break;
00050 link = link->Next();
00051 }
00052 if(0 == link) {
00053 if(strlen(caller)) {
00054 coutE(InputArguments) << caller << ": cannot find object named \"" << name << "\"" << endl;
00055 }
00056 return 0;
00057 }
00058 return dynamic_cast<TObjOptLink*>(link);
00059 }
00060
00061
00062
00063 Bool_t RooList::moveBefore(const char *before, const char *target, const char *caller)
00064 {
00065
00066
00067
00068
00069 TObjOptLink *targetLink= findLink(target,caller);
00070 if(0 == targetLink) return kFALSE;
00071
00072
00073 TObjOptLink *beforeLink= findLink(before,caller);
00074 if(0 == beforeLink) return kFALSE;
00075
00076
00077 TObject *obj= targetLink->GetObject();
00078 TString opt= targetLink->GetOption();
00079
00080
00081 Remove(targetLink);
00082
00083
00084 if(beforeLink == fFirst) {
00085 RooList::AddFirst(obj, opt.Data());
00086 }
00087 else {
00088
00089 NewOptLink(obj, opt.Data(), beforeLink->Prev());
00090 fSize++;
00091 Changed();
00092 }
00093 return kTRUE;
00094 }
00095
00096
00097
00098 Bool_t RooList::moveAfter(const char *after, const char *target, const char *caller)
00099 {
00100
00101
00102
00103
00104 TObjOptLink *targetLink= findLink(target,caller);
00105 if(0 == targetLink) return kFALSE;
00106
00107
00108 TObjOptLink *afterLink= findLink(after,caller);
00109 if(0 == afterLink) return kFALSE;
00110
00111
00112 TObject *obj= targetLink->GetObject();
00113 TString opt= targetLink->GetOption();
00114
00115
00116 Remove(targetLink);
00117
00118
00119 if(afterLink == fLast) {
00120 RooList::AddLast(obj, opt.Data());
00121 }
00122 else {
00123 NewOptLink(obj, opt.Data(), afterLink);
00124 fSize++;
00125 Changed();
00126 }
00127 return kTRUE;
00128 }