| |
| #ifndef _GEMFIRE_VECTOROFSHAREDBASE_HPP_ |
| #define _GEMFIRE_VECTOROFSHAREDBASE_HPP_ |
| |
| /*========================================================================= |
| * Copyright (c) 2002-2014 Pivotal Software, Inc. All Rights Reserved. |
| * This product is protected by U.S. and international copyright |
| * and intellectual property laws. Pivotal products are covered by |
| * more patents listed at http://www.pivotal.io/patents. |
| *======================================================================== |
| */ |
| |
| #include "gfcpp_globals.hpp" |
| |
| #include "SharedPtr.hpp" |
| #ifdef BUILD_CPPCACHE |
| #include <vector> |
| #endif |
| |
| /** @file |
| */ |
| |
| namespace gemfire { |
| |
| #ifdef BUILD_CPPCACHE |
| typedef std::vector< gemfire::SharedBasePtr > VofSBP; |
| typedef VofSBP::const_iterator VofSBPIterator; |
| #else |
| class VofSBP; |
| class VofSBPIterator; |
| #endif |
| |
| /** Represents a vector of <code>gemfire::SharedBasePtr</code> |
| */ |
| class CPPCACHE_EXPORT VectorOfSharedBase |
| { |
| private: |
| VofSBP* m_stdvector; |
| |
| public: |
| |
| /** Interface of an iterator for <code>VectorOfSharedBase</code>.*/ |
| class CPPCACHE_EXPORT Iterator |
| { |
| private: |
| |
| VofSBPIterator* m_iter; |
| |
| Iterator( const VofSBPIterator& iter ); |
| // Never defined. |
| Iterator( ); |
| |
| private: |
| const Iterator& operator=( const Iterator& ); |
| |
| public: |
| |
| Iterator( const Iterator& other ); |
| |
| const SharedBasePtr operator * ( ) const; |
| |
| Iterator& operator ++ ( ); |
| |
| void operator ++ ( int ); |
| |
| bool operator == ( const Iterator& other ) const; |
| |
| bool operator != ( const Iterator& other ) const; |
| |
| ~Iterator( ); |
| |
| |
| friend class VectorOfSharedBase; |
| }; |
| |
| /** return the size of the vector. */ |
| int32_t size( ) const; |
| |
| /** return the largest possible size of the vector. */ |
| int32_t max_size( ) const; |
| |
| /** return the number of elements allocated for this vector. */ |
| int32_t capacity( ) const; |
| |
| /** return true if the vector's size is 0. */ |
| bool empty( ) const; |
| |
| /** Return the n'th element */ |
| SharedBasePtr& operator [] ( int32_t n ); |
| |
| /** Return the n'th element */ |
| const SharedBasePtr& operator [] ( int32_t n ) const; |
| |
| /** Return the n'th element with bounds checking. */ |
| SharedBasePtr& at( int32_t n ); |
| |
| /** Return the n'th element with bounds checking. */ |
| SharedBasePtr& at( int32_t n ) const; |
| |
| /** Get an iterator pointing to the start of vector. */ |
| Iterator begin( ) const; |
| |
| /** Get an iterator pointing to the end of vector. */ |
| Iterator end( ) const; |
| |
| /** Create an empty vector. */ |
| VectorOfSharedBase( ); |
| |
| /** Create a vector with n elements allocated */ |
| VectorOfSharedBase( int32_t n ); |
| |
| /** Create a vector with n copies of t */ |
| VectorOfSharedBase( int32_t n, const SharedBasePtr& t ); |
| |
| /** copy constructor */ |
| VectorOfSharedBase( const VectorOfSharedBase& other ); |
| |
| /** destructor, sets all SharedPtr elements to NULLPTR */ |
| ~VectorOfSharedBase( ); |
| |
| /** assignment operator */ |
| VectorOfSharedBase& operator = ( const VectorOfSharedBase& other ); |
| |
| /** reallocate a vector to hold n elements. */ |
| void reserve( int32_t n ); |
| |
| /** returns the first element. */ |
| SharedBasePtr& front( ); |
| |
| /** returns the first element. */ |
| const SharedBasePtr& front( ) const; |
| |
| /** returns the last element. */ |
| SharedBasePtr& back( ); |
| |
| /** returns the last element. */ |
| const SharedBasePtr& back( ) const; |
| |
| /** insert a new element at the end. */ |
| void push_back( const SharedBasePtr& e ); |
| |
| /** removes the last element. */ |
| void pop_back( ); |
| |
| /** swaps the contents of two vectors. */ |
| void swap( VectorOfSharedBase& other ); |
| |
| /** erases all elements. */ |
| void clear( ); |
| |
| /** inserts or erases elements at the end such that size becomes n. |
| * Not to be confused with reserve which simply allocates the space, |
| * resize fills the space with active elements. */ |
| void resize(int32_t n, const SharedBasePtr& t = NULLPTR); |
| |
| /** insert object at the given index. */ |
| void insert( int32_t index, const SharedBasePtr& t ); |
| |
| /** removes the object at the specified index from a vector |
| */ |
| void erase( int32_t index ); |
| |
| }; |
| |
| } |
| |
| #endif |
| |