wlan_bearer/wlanldd/wlan_common/osa_common/inc/osacarray.h
changeset 0 c40eb8fe8501
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlan_bearer/wlanldd/wlan_common/osa_common/inc/osacarray.h	Tue Feb 02 02:03:13 2010 +0200
@@ -0,0 +1,212 @@
+/*
+* Copyright (c) 2007 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:   wrapper on top of C array with C++ STL interface
+*
+*/
+
+/*
+* %version: 3 %
+*/
+
+#ifndef WLANCARRAY_H
+#define WLANCARRAY_H
+
+#include "algorithm.h"
+
+#include "osacarraypolicy.h"
+
+/**
+ *  wrapper on top of C array with C++ STL interface
+ *
+ *
+ *  @lib wlanosa.lib
+ *  @since S60 v3.2
+ */
+template
+<
+    class T, 
+    TInt the_size,
+    // check out osacarraypolicy.h 4 these
+    class CopyingPolicy = NoCopy<T>
+> 
+class Carray : protected CopyingPolicy, public DBase
+    {
+
+	typedef Carray<T, the_size, CopyingPolicy> Self;
+
+public:
+
+	// type definitions
+	typedef T		    value_type;
+	typedef T*		    iterator;
+	typedef const T*	const_iterator;
+	typedef T&		    reference;
+	typedef const T&	const_reference;
+	typedef TInt	    size_type;
+	
+    /**
+     * Constructor.
+     *
+     * @since S60 v3.2
+     */
+	Carray() {};
+
+    /**
+     * Constructor. Construct with inital data
+     *
+     * @since S60 v3.2
+     * @param aP initial data
+     */
+	explicit inline Carray( T* aP ) { copy( aP, aP + the_size, begin()); }
+
+    /**
+     * returns iterator to begin of the sequence
+     *
+     * @since S60 v3.2
+     * @return iterator to begin of the sequence
+     */
+    inline iterator begin() { return v; }
+
+    /**
+     * returns const iterator to begin of the sequence
+     *
+     * @since S60 v3.2
+     * @return const iterator to begin of the sequence
+     */
+    inline const_iterator begin() const { return v; }
+
+    /**
+     * returns iterator to end of the sequence
+     *
+     * @since S60 v3.2
+     * @return iterator to end of the sequence
+     */
+    inline iterator end() { return v + the_size; }
+
+    /**
+     * returns const iterator to end of the sequence
+     *
+     * @since S60 v3.2
+     * @return const iterator to end of the sequence
+     */
+    inline const_iterator end() const { return v + the_size; }
+
+    /**
+     * returns size of the storage
+     *
+     * @since S60 v3.2
+     * @return size of the storage
+     */
+    inline size_type size() const { return the_size; }
+
+    /**
+     * returns max size of the storage
+     *
+     * @since S60 v3.2
+     * @return max size of the storage
+     */
+    inline size_type max_size() const { return the_size; }
+
+    /**
+     * non const [] operator access
+     *
+     * @since S60 v3.2
+     * @return non const reference to element
+     */
+    inline reference operator[](TInt i) { return v[i]; } 
+
+    /**
+     * const [] operator access
+     *
+     * @since S60 v3.2
+     * @return const reference to element
+     */
+    inline const_reference operator[](TInt i) const { return v[i]; } 
+
+    /**
+     * return non const reference to front of sequence
+     *
+     * @since S60 v3.2
+     * @return non const reference to front of sequence
+     */
+    inline reference front() { return v[0]; }
+
+    /**
+     * return const reference to front of sequence
+     *
+     * @since S60 v3.2
+     * @return const reference to front of sequence
+     */
+    inline const_reference front() const { return v[0]; }
+
+    /**
+     * return non const reference to back of sequence
+     *
+     * @since S60 v3.2
+     * @return non const reference to back of sequence
+     */
+    inline reference back() { return v[the_size-1]; }
+
+    /**
+     * return const reference to back of sequence
+     *
+     * @since S60 v3.2
+     * @return const reference to back of sequence
+     */
+    inline const_reference back() const { return v[the_size-1]; }
+
+    /**
+     * conversion to ordinary array
+     *
+     * @since S60 v3.2
+     * @return const pointer to begin of the sequence
+     */
+    inline const T* data() const { return v; }
+
+    /**
+     * conversion to ordinary array
+     *
+     * @since S60 v3.2
+     * @return non const pointer to begin of the sequence
+     */
+    inline T* data() { return v; }
+
+    /**
+     * assignment operator
+     *
+     * @since S60 v3.2
+     */
+	Self& operator=( const Self& );
+
+    /**
+     * copy constructor
+     *
+     * @since S60 v3.2
+     */
+    inline Carray( const Self& o ) 
+        { 
+        Copy( 
+            const_cast<iterator>(o.begin()), 
+            const_cast<iterator>(o.end()), 
+            begin() ); 
+        }
+
+private:
+
+	T v[the_size];
+};
+
+#include "osacarray.inl"
+
+#endif // WLANCARRAY_H