DKStringW::IntegerArray DKStringW::ToIntegerArray(const DKStringW& delimiter, bool ignoreEmptyString) const { StringArray strings = Split(delimiter, ignoreEmptyString); IntegerArray result; result.Reserve(strings.Count()); for (size_t i = 0; i < strings.Count(); ++i) result.Add(strings.Value(i).ToInteger()); return result; }
bool IntegerArrayHash::equal(const IntegerArray& a, const IntegerArray& b) { if (a.isDeletedValue() || b.isDeletedValue()) return a.isDeletedValue() == b.isDeletedValue(); if (a.size() != b.size()) return false; for (size_t i = 0; i < a.size(); ++i) { if (a.integers()[i] != b.integers()[i]) return false; } return true; }
IntegerArray::IntegerArray (const IntegerArray& v) { (*this) .allocateDataSpace(v.order()) ; (*this) = v; }
void CUdpBizPacket::ReadIntegerArray(IntegerArray& Array) { int nCount; ReadBuffer(&nCount, sizeof(int)); if (nCount > word(-1)) { Array.clear(); return; } Array.resize(nCount); if (nCount > 0) { // 多份资料表明: vector 在内存中占用线性连续空间。 ReadBuffer((void*)&Array[0], sizeof(int) * nCount); } }
void CUdpBizPacket::WriteIntegerArray(const IntegerArray& Array) { int nCount; nCount = Array.size(); WriteBuffer(&nCount, sizeof(int)); if (nCount > 0) WriteBuffer((void*)&Array[0], sizeof(int) * nCount); }
LongInt l1(const IntegerArray& v) { LongInt value = 0; const LongInt d = v.order(); for(LongInt i=0; i<d; i++) { value += v(i); } return value; }
LongInt maxEntryOf(const IntegerArray& v) { const LongInt d = v.order(); LongInt value = v(0); for(LongInt mu=1; mu<d; mu++) { const LongInt& v_mu = v(mu); if(value<v_mu) { value = v_mu; } } return value; }
bool IntegerArray::operator != (const IntegerArray& a) const { const LongInt n1 = (*this).order(); const LongInt n2 = a.order(); bool value = false; if(n1==n2) { for(LongInt mu=0; mu<n1 && value==false; mu++) { if((*this)(mu)!=a(mu)) { value = true; } } } else { value = true; } return value; }
int main() { IntegerArray Array; IntegerLinkedList LinkedList; int nStart = 100000; int nIncrement = 100000; int Searches = 5000; int Retrievals = 5000; int Insertions = 5000; int Deletions = 5000; Timer Watch; // Array Analysis cout << "======================= Array ====================" << endl; for (int n=nStart; n<MAXSIZE; n=n+nIncrement) { cout << "---------------------- n=" << n << "--------------------" << endl; Array.MakeNULL(); srand(n); for (int i=0; i<n; i++) { int Data = RandInt(0,n-1); Array.Insert(Data, Array.GetSize()); } srand(n); Watch.StartTimer(); int Found = 0; for (int i=0; i<Searches; i++) { int Data = RandInt(0,n); if (Array.Locate(Data) != -1) Found++; } cout << "Time for search: " << Watch.GetElapsedTime() << " seconds. Successful: " << Found << "." << endl; Watch.StartTimer(); int Retrieval = 0; for (int i=0; i<Retrievals; i++) { int Index = RandInt(0,n-1); Array.Retrieve(Index); Retrieval++; } cout << "Time for retrieve: " << Watch.GetElapsedTime() << " seconds. Retrievals: " << Retrieval << "." << endl; Watch.StartTimer(); for (int i=0; i<Insertions; i++) { int Data = RandInt(0,n); int Index = Array.GetSize()==0 ? 0 : RandInt(0, Array.GetSize()); Array.Insert(Data, Index); } cout << "Time for insert: " << Watch.GetElapsedTime() << " seconds." << endl; Watch.StartTimer(); int Deleted = 0; for (int i=0; i<Deletions; i++) { int Index = RandInt(0,n-1); if (Array.Delete(Index) == 0) Deleted++; } cout << "Time for delete: " << Watch.GetElapsedTime() << " seconds. Deletions: " << Deleted << "." << endl; // Setting up for purge. Array.MakeNULL(); for (int i=0; i<n; i++) { int Data = rand()%100; Array.Insert(Data, Array.GetSize()); } Watch.StartTimer(); for (int i=0; i<5; i++) Array.Purge(rand()%100); cout << "Time for purge: " << Watch.GetElapsedTime() << " seconds. " << endl; } // Linked List Analysis cout << "======================= Linked List ====================" << endl; for (int n=nStart; n<MAXSIZE; n=n+nIncrement) { cout << "---------------------- n=" << n << "--------------------" << endl; LinkedList.MakeNULL(); srand(n); for (int i=0; i<n; i++) { int Data = RandInt(0,n-1); LinkedList.Insert(Data, 0); } srand(n); Watch.StartTimer(); int Found = 0; for (int i=0; i<Searches; i++) { int Data = RandInt(0,n); if (LinkedList.Locate(Data) != -1) Found++; } cout << "Time for search: " << Watch.GetElapsedTime() << " seconds. Successful: " << Found << "." << endl; Watch.StartTimer(); int Retrieval = 0; for (int i=0; i<Retrievals; i++) { int Index = RandInt(0,n-1); LinkedList.Retrieve(Index); Retrieval++; } cout << "Time for retrieve: " << Watch.GetElapsedTime() << " seconds. Retrievals: " << Retrieval << "." << endl; Watch.StartTimer(); for (int i=0; i<Insertions; i++) { int Data = RandInt(0,n); int Index = LinkedList.GetSize()==0 ? 0 : RandInt(0, LinkedList.GetSize()); LinkedList.Insert(Data, Index); } cout << "Time for insert: " << Watch.GetElapsedTime() << " seconds." << endl; Watch.StartTimer(); int Deleted = 0; for (int i=0; i<Deletions; i++) { int Index = RandInt(0,n-1); if (LinkedList.Delete(Index) == 0) Deleted++; } cout << "Time for delete: " << Watch.GetElapsedTime() << " seconds. Deletions: " << Deleted << "." << endl; // Setting up for purge. LinkedList.MakeNULL(); for (int i=0; i<n; i++) { int Data = rand()%100; LinkedList.Insert(Data, 0); } Watch.StartTimer(); for (int i=0; i<5; i++) LinkedList.Purge(rand()%100); cout << "Time for purge: " << Watch.GetElapsedTime() << " seconds. " << endl; } return 0; }
void OneToOneCorrection(Accelerator* acc, Accelerator::Plane pxy, size_t nseg) { dfs_trace(dfs_trace::level_1)<<"Applying one-to-one steering to "<<acc->GetName()<<": "; switch(pxy) { case Accelerator::x_only: dfs_trace(dfs_trace::level_1)<<"X plane only"; break; case Accelerator::y_only: dfs_trace(dfs_trace::level_1)<<"Y plane only"; break; case Accelerator::x_and_y: dfs_trace(dfs_trace::level_1)<<"X and Y planes"; break; } dfs_trace(dfs_trace::level_1)<<endl; ReferenceParticleArray refp; acc->InitialiseTracking(1,refp); acc->AllowIncrementalTracking(true); IntegerArray ibpm; acc->GetBeamlineIndecies("BPM.*",ibpm); DFS_Segment s = acc->GetBeamlineRange(); for(size_t n=0; n<ibpm.size(); n+=nseg) { DFS_Segment sn; sn.first = n==0 ? s.first : ibpm[n]+1; sn.second = n+nseg<ibpm.size() ? ibpm[n+nseg] : s.second; dfs_trace(dfs_trace::level_2)<<" correcting "<<sn; ROChannelArray bpms; RWChannelArray xycors; acc->SetActiveBeamlineSegment(sn); acc->GetMonitorChannels(pxy,bpms); acc->GetCorrectorChannels(pxy,xycors); ResponseMatrixGenerator rmg(acc,bpms,xycors); SVDMatrix<double> svd(rmg.Generate(0)); RealVector y0 = rmg.GetReference(); RealVector y = svd(y0); xycors.IncrementAll(-1.0*y); if(dfs_trace::verbosity>=dfs_trace::level_2) { dfs_trace(dfs_trace::level_2)<<' '<<sqrt(y0*y0); acc->TrackBeam(0); y0=bpms; dfs_trace(dfs_trace::level_2)<<' '<<sqrt(y0*y0); } dfs_trace(dfs_trace::level_2)<<endl; if(sn.second == s.second) { break; } } }
unsigned IntegerArrayHash::hash(const IntegerArray& array) { return StringHasher::hashMemory(array.integers(), array.size() * sizeof(int)); }
static bool isDeletedValue(const IntegerArray& array) { return array.isDeletedValue(); }
static void constructDeletedValue(IntegerArray& slot) { slot.markDeleted(); }