Beispiel #1
0
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; 
 }
Beispiel #4
0
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);
    }
}
Beispiel #5
0
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;
 } 
Beispiel #9
0
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(); }