datacommsserver/esockserver/test/protocols/ptestinternalsocket/src/agregate.h
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/datacommsserver/esockserver/test/protocols/ptestinternalsocket/src/agregate.h	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,75 @@
+// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#ifndef AGGREGATE_H_
+#define AGGREGATE_H_
+
+#include <e32base.h>
+
+const TInt KMaxNumItems = 6;
+
+class CAggregateCollection;
+
+/** These are individual items that need to comple and are awaiting completion of their TRequestStatus as
+	when they complete they let the collection know that they have complteted and allow the collection object to take
+	appropriate action. Objects of this class are created and then owned by the CAgregateCollection. They are then
+	deleted when the CAgregateCollection object is destroyed (hence the protected destructor) 
+*/
+NONSHARABLE_CLASS(CAggregateItem) : public CActive
+	{
+	 friend class CAggregateCollection;
+public:
+	void Start();
+	TInt ReturnCode();
+protected:
+	static CAggregateItem *NewL(CAggregateCollection* aColl);
+	CAggregateItem(CAggregateCollection* aColl);
+	~CAggregateItem();
+	virtual void RunL();
+	virtual void DoCancel();
+private:
+	CAggregateCollection* iCollection;
+	TBool iIsAdded;
+	};
+	
+/** This is a collection of CAggregateItems. The basic use of this class is to allow for waiting for completion of more than
+	one TRequestStatus. This is does by creating a collection of active objects with iStatuses to wait upon. These need to be 
+	used in some asynchronous call. and the control then needs to be given back to the active scheduler.
+	The object will either wait for the completion of any of the items or all of the items before compltetion some
+	TRequestStatus. The decision on whether to wait for any or whether to wait for all set up on construction
+*/ 	
+NONSHARABLE_CLASS(CAggregateCollection): public CBase
+	{
+	friend class CAggregateItem;
+public:
+	enum TType {EAny,EAll};
+	static CAggregateCollection* NewL(TRequestStatus &aStatus,TType aType);
+	~CAggregateCollection();
+	CAggregateItem* GetNewItemL();
+	void Kick();
+private:
+	CAggregateCollection(TRequestStatus &aStatus,TType aType);
+	void UpdateCompletion();
+	TRequestStatus& iStatusToComplete;
+	CAggregateItem* iItems[KMaxNumItems];
+	TInt iNumItems;
+	TInt iNumItemsCompleted; //The number of CAggregateItems Completed
+	TType iType;
+	};
+
+
+#endif
+
+