summaryrefslogtreecommitdiffstats
path: root/sbe/sbefw/vector
diff options
context:
space:
mode:
Diffstat (limited to 'sbe/sbefw/vector')
-rw-r--r--sbe/sbefw/vector374
1 files changed, 0 insertions, 374 deletions
diff --git a/sbe/sbefw/vector b/sbe/sbefw/vector
deleted file mode 100644
index 1f14eb20..00000000
--- a/sbe/sbefw/vector
+++ /dev/null
@@ -1,374 +0,0 @@
-
-#ifndef stl_vector
-#define stl_vector
-
-/**
- * @file vector
- * @brief simple stl vector template class declaration.
- */
-
-#include <stddef.h>
-
-#if !defined( __STDC_LIMIT_MACROS)
-#define __STDC_LIMIT_MACROS
-#endif
-#include <stdint.h>
-#include <pool.H>
-#include <assert.h>
-#include <new>
-namespace std
-{
-
- /**
- * @class vector
- * subset of stl vector
- * @note Does not support allocators, reverse iterators.
- */
- template <class T>
- class vector
- {
- public:
-
- typedef T * iterator;
- typedef const T * const_iterator;
- typedef T & reference;
- typedef const T & const_reference;
- typedef size_t size_type;
- typedef T value_type;
- typedef T * pointer;
- typedef const T * const_pointer;
-
- protected:
-
- pointer iv_start __attribute__ ((aligned (8)));
- pointer iv_finish;
- SBEVECTORPOOL::vectorMemPool_t *iv_poolPtr;
- public:
-
- /**
- * Constructor default
- * @post The vector is created with storage of
- * G_BLOCKSIZE bytes.
- */
- explicit vector(void)
- {
- iv_poolPtr = SBEVECTORPOOL::allocMem();
- assert ( NULL != iv_poolPtr)
- iv_start = ( T* )iv_poolPtr->data;
- iv_finish = iv_start;
- }
-
-
- /**
- * MOVE COPY CTOR create a vector from another vector
- * @param[in] x source vector
- * @post Vector of x.size() is created from x with same
- * memory.
- * size() == capacity() == x.size()
- * @note move Copy construtor willuse shallow copy. So input
- * as well as output vector will point to same data
- */
- vector(const vector<T>&& x)
- {
- iv_start = x.iv_start;
- iv_finish = x.iv_finish;
- iv_poolPtr = x.iv_poolPtr;
- iv_poolPtr->refCount++;
- }
-
- /**
- * Reserve space for atleast n elements
- * @param[in] n Number of elements
- * @note We are having fixed size vectors in ppe. Defining
- * this function to avoid compile issues in standard
- * library. This function is noop for less than 512
- * bytes requirement. For more than 512 bytes, it will
- * assert.
- */
- void reserve(size_type n)
- {
- assert(n < max_size());
- return;
- }
- /**
- * DTOR
- * @post Storage released
- */
- __attribute__ ((always_inline))
- ~vector()
- {
- clear(); // call dtors
- SBEVECTORPOOL::releaseMem(iv_poolPtr);
- }
-
- /**
- * Move Assignment operator.
- * @param[in] x A vector.
- * @return A vector (for the purpose of multiple assigns).
- * @pre None.
- * @post *this == x, this->capacity() == x.size().
- * All previously obtained iterators are invalid.
- */
- vector<T>& operator=(const vector<T>&& x)
- {
- // Just check here for pool to make sure
- // input vector and current vector are not same;
- if( iv_poolPtr != x.iv_poolPtr)
- {
- clear();
- SBEVECTORPOOL::releaseMem(iv_poolPtr);
- iv_start = x.iv_start;
- iv_finish = x.iv_finish;
- iv_poolPtr = x.iv_poolPtr;
- iv_poolPtr->refCount++;
- }
- return(*this);
- }
-
- // Iterators --------------------
-
- /**
- * Get iterator to the first vector element
- * @return iterator of rist vector element
- * @pre None.
- * @post None.
- */
- __attribute__ ((always_inline))
- iterator begin()
- {
- return (iv_start);
- }
-
- /**
- * Get const_iterator to the first vector element
- * @return const_iterator of rist vector element
- * @pre None.
- * @post None.
- */
- __attribute__ ((always_inline))
- const_iterator begin() const
- {
- return (iv_start);
- }
-
- /**
- * Get iterator to the last vector element + 1
- * @return iterator
- * @pre None.
- * @post None.
- */
- __attribute__ ((always_inline))
- iterator end()
- {
- return (iv_finish);
- }
-
- /**
- * Get const_iterator to the last vector element + 1
- * @return const_iterator
- * @pre None.
- * @post None.
- */
- __attribute__ ((always_inline))
- const_iterator end() const
- {
- return (iv_finish);
- }
-
- // Capacity -----------------------------------------------
-
- /**
- * Get the number of elements in the container
- * @return number of elements in the container
- */
- __attribute__ ((always_inline))
- size_type size() const
- {
- return(iv_finish - iv_start);
- }
-
- /**
- * Return the maximum potential size the container could reach.
- * @return number of the maximum element count this container
- * could reach
- */
- __attribute__ ((always_inline))
- size_type max_size() const
- {
- return SBEVECTORPOOL::G_BLOCKSIZE/(sizeof(T));
- }
-
- /**
- * Query for empty container
- * @return bool, true if size()==0 else false.
- * @pre none
- * @post none
- */
- __attribute__ ((always_inline))
- bool empty() const
- {
- return(size() == 0);
- }
-
- // - Element Access -----------------------------------
-
- /**
- * Access a mutable reference to an element in the container
- * @param An index into the vector
- * @return A reference to an element
- * @pre 0 <= n < size()
- * @post None.
- */
- __attribute__ ((always_inline))
- reference operator[](size_type n)
- {
- assert(n < size());
- return(*(iv_start + n));
- }
-
- /**
- * Access a mutable reference to an element in the container
- * @param[in] index An index into the vector
- * @return A reference to an element
- * @pre 0 <= n < size()
- * @post None.
- * @note no exception handling
- */
- __attribute__ ((always_inline))
- reference at(size_type index)
- {
- assert(index < size());
- return(*(iv_start + index));
- }
-
- /**
- * Get an immutable reference to an element in the container
- * @param[in] index An index into the vector
- * @return A const_reference to an object or type T
- * @pre 0 <= n < size()
- * @post None.
- */
- __attribute__ ((always_inline))
- const_reference operator[](size_type index) const
- {
- assert(index < size());
- return(*(iv_start + index));
- }
-
- /**
- * Get an immutable reference to an element in the container
- * @param[in] index An index into the vector
- * @return A const_reference to an object or type T
- * @pre 0 <= n < size()
- * @post None.
- * @note no exception handling
- */
- __attribute__ ((always_inline))
- const_reference at(size_type index) const
- {
- assert(index < size());
- return(*(iv_start + index));
- }
-
- /**
- * Get a mutable reference to the first element in the container
- * @return reference to first element
- * @pre none
- * @post None
- */
- __attribute__ ((always_inline))
- reference front()
- {
- return *iv_start;
- }
-
- /**
- * Get an Immutable reference to the first element in the
- * container
- * @return const_reference to first element
- * @pre none
- * @post None
- */
- __attribute__ ((always_inline))
- const_reference front() const
- {
- return *iv_start;
- }
-
- /**
- * Get a mutable reference to the last element in the container
- * @return reference to last element
- * @pre none
- * @post None
- */
- __attribute__ ((always_inline))
- reference back()
- {
- return *(iv_finish-1);
- }
-
- /**
- * Get an Immutable reference to the last element in the
- * container
- * @return reference to last element
- * @pre none
- * @post None
- */
- __attribute__ ((always_inline))
- const_reference back() const
- {
- return *(iv_finish-1);
- }
-
- /**
- * Add element to the back of the container
- * @param[in] x reference to object used to create new element
- * @pre none
- * @post All previously obtained iterators are invalid.
- */
- __attribute__ ((always_inline))
- void push_back(const T& x)
- {
- assert(max_size() > size());
- new (iv_finish++) T(x);
- }
-
- /**
- * Clear the vector
- * @pre none.
- * @post size() = 0, All previously obtained iterators are
- * invalid
- * @note capacity unchanged
- */
- void clear ()
- {
- while(iv_finish != iv_start)
- {
- --iv_finish;
- (iv_finish)->~T();
- }
- }
-
- /*
- * Assign new content to the vector object
- * @param[in] n number of elements to assign
- * @param[in] x reference to element to copy in
- */
- void assign ( size_type n, const T& x)
- {
- assert(n < max_size());
- clear();
- for ( ; n> 0; n--)
- push_back( x);
- }
-
- private:
- vector(const vector<T>& x);
- vector<T>& operator=(const vector<T>& x);
-};
-
-}; // end namespace std
-
-
-#endif
-/* vim: set filetype=cpp : */
OpenPOWER on IntegriCloud