File indexing completed on 2023-03-17 11:01:30
0001 #include "TMath.h"
0002 #include "TCut.h"
0003
0004 #include "Fireworks/Core/interface/FWTEventList.h"
0005
0006
0007 void FWTEventList::Add(const TEventList *alist) {
0008
0009
0010
0011
0012 Int_t i;
0013 Int_t an = alist->GetN();
0014 if (!an)
0015 return;
0016 Long64_t *alst = alist->GetList();
0017 if (!fList) {
0018 fList = new Long64_t[an];
0019 for (i = 0; i < an; i++)
0020 fList[i] = alst[i];
0021 fN = an;
0022 fSize = an;
0023 return;
0024 }
0025 Int_t newsize = fN + an;
0026 Long64_t *newlist = new Long64_t[newsize];
0027 Int_t newpos, alpos;
0028 newpos = alpos = 0;
0029 for (i = 0; i < fN; i++) {
0030 while (alpos < an && fList[i] > alst[alpos]) {
0031 newlist[newpos] = alst[alpos];
0032 newpos++;
0033 alpos++;
0034 }
0035 if (alpos < an && fList[i] == alst[alpos])
0036 alpos++;
0037 newlist[newpos] = fList[i];
0038 newpos++;
0039 }
0040 while (alpos < an) {
0041 newlist[newpos] = alst[alpos];
0042 newpos++;
0043 alpos++;
0044 }
0045 delete[] fList;
0046 fN = newpos;
0047 fSize = newsize;
0048 fList = newlist;
0049
0050 TCut orig = GetTitle();
0051 TCut added = alist->GetTitle();
0052 TCut updated = orig || added;
0053 SetTitle(updated.GetTitle());
0054 }
0055
0056
0057 void FWTEventList::Enter(Long64_t entry) {
0058
0059
0060 if (!fList) {
0061 fList = new Long64_t[fSize];
0062 fList[0] = entry;
0063 fN = 1;
0064 return;
0065 }
0066 if (fN > 0 && entry == fList[fN - 1])
0067 return;
0068 if (fN >= fSize) {
0069 Int_t newsize = TMath::Max(2 * fSize, fN + fDelta);
0070 Resize(newsize - fSize);
0071 }
0072 if (fN == 0 || entry > fList[fN - 1]) {
0073 fList[fN] = entry;
0074 ++fN;
0075 } else {
0076 Int_t pos = TMath::BinarySearch(fN, fList, entry);
0077 if (pos >= 0 && entry == fList[pos])
0078 return;
0079 ++pos;
0080 memmove(&(fList[pos + 1]), &(fList[pos]), 8 * (fN - pos));
0081 fList[pos] = entry;
0082 ++fN;
0083 }
0084 }