wlan_bearer/wlanldd/wlan_common/umac_common/inc/umaccarray.h
changeset 0 c40eb8fe8501
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlan_bearer/wlanldd/wlan_common/umac_common/inc/umaccarray.h	Tue Feb 02 02:03:13 2010 +0200
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2005-2008 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:   Class template for constant size arrays.
+*
+*/
+
+/*
+* %version: 8 %
+*/
+
+#ifndef _CARRAY_H
+#define _CARRAY_H
+
+/*
+ *
+ * The following code declares class array,
+ * an STL container (as wrapper) for arrays of constant size.
+ *
+ * compile time modifiable polies:
+ * - to call delete or not to 4 members of array
+ * - copy ctor and assignment operator policies; see umaccarraypolicy.h         
+ */
+
+#include "algorithm.h"
+
+typedef TUint size_t;
+
+#include "umactypemanip.h"
+#include "umaccarraypolicy.h"
+
+template
+<
+        class T, 
+        size_t the_size,
+        bool deletepointees = EFalse,           // call delete or not 4 members of array
+        class CopyingPolicy = ShallowCopy<T>,   // check out policyCarray.h 4 these
+        class HeapAllocationPolicy = OpNewAlloc // our allocation policy 4 a heap allocated Carray         
+> 
+class Carray :  protected CopyingPolicy,
+                public HeapAllocationPolicy 
+{
+	typedef Carray<T, the_size, deletepointees, CopyingPolicy, HeapAllocationPolicy> Self;
+
+private:
+	T v[the_size];
+
+        // compile time function selectives
+        void delete_pointees( Int2Type<ETrue> );
+        void delete_pointees( Int2Type<EFalse> ) {};
+
+public:
+
+	// type definitions
+	typedef T		    value_type;
+	typedef T*		    iterator;
+	typedef const T*	const_iterator;
+	typedef T&		    reference;
+	typedef const T&	const_reference;
+	typedef size_t	    size_type;
+	typedef size_t	    TUint;
+	
+	// default constructor
+	Carray() {};
+	// construct with inital data
+	// do not allow to be used in explicit conversations
+	explicit 
+        Carray(T* p) { copy(p, p + the_size, begin()); }
+
+    ~Carray() { delete_pointees( Int2Type<deletepointees>() ); }
+
+	// iterator support
+	iterator begin() {return v;}
+	const_iterator begin() const {return v;}
+	iterator end() {return v + the_size;}
+	const_iterator end() const {return v + the_size;}
+
+	// size is constant
+	size_type size() const {return the_size;}
+	size_type max_size() const {return the_size;}
+
+	// direct element access
+	reference operator[](size_t i) {return v[i];} 
+	const_reference operator[](size_t i) const {return v[i];} 
+
+	// front() and back()
+        reference front() {return v[0]; }
+        const_reference front() const {return v[0]; }
+        reference back() {return v[the_size-1]; }
+        const_reference back() const {return v[the_size-1];}
+
+	//swap
+    void swap(Self& r) { swap_ranges(begin(), end(), r.begin()); }
+
+	// conversion to ordinary array
+	const T* data() const {return v;}
+	T* data() {return v;}
+
+	// assignment
+	Self& operator=(const Self&);
+
+	// copy ctor
+    Carray(const Self& o) 
+        { Copy(const_cast<iterator>(o.begin()), const_cast<iterator>(o.end()), begin()); }
+};
+
+template<class T, size_t the_size, bool deletepointees, 
+class CopyingPolicy, class HeapAllocationPolicy>
+inline
+void Carray<T, the_size, deletepointees, CopyingPolicy, 
+HeapAllocationPolicy>::delete_pointees(Int2Type<ETrue>)
+    {
+    for( size_t i = 0 ; i < size() ; ++i )
+        {
+        delete v[i];
+        }
+    }
+
+// asignment operator
+template<class T, size_t the_size,  bool deletepointees, class CopyingPolicy, class HeapAllocationPolicy>
+inline
+Carray<T, the_size, deletepointees, CopyingPolicy, HeapAllocationPolicy>& 
+Carray<T, the_size, deletepointees, CopyingPolicy, HeapAllocationPolicy>::operator=(const Self& o)
+    {
+    // use policy chosen at compile time
+    Copy(const_cast<iterator>(o.begin()), const_cast<iterator>(o.end()), begin());      
+	return (*this);
+    }
+
+// comparisons
+template<class T, size_t the_size, bool deletepointees, class CopyingPolicy, class HeapAllocationPolicy>
+inline
+bool operator == (const Carray<T, the_size, deletepointees, CopyingPolicy, HeapAllocationPolicy>& x, 
+const Carray<T, the_size, deletepointees, CopyingPolicy, HeapAllocationPolicy>& y)
+    {
+    return equal(x.begin(), x.end(), y.begin());
+    }
+
+// global swap()
+template<class T, size_t the_size, bool deletepointees, class CopyingPolicy, class HeapAllocationPolicy>
+inline void swap (Carray<T, the_size, deletepointees, CopyingPolicy, HeapAllocationPolicy>& x, 
+Carray<T, the_size, deletepointees, CopyingPolicy, HeapAllocationPolicy>& y)
+    {
+    x.swap(y);
+    }
+
+#endif //_CARRAY_H