Stxxl 1.2.1
simple_vector.h
00001 /***************************************************************************
00002  *  include/stxxl/bits/common/simple_vector.h
00003  *
00004  *  Part of the STXXL. See http://stxxl.sourceforge.net
00005  *
00006  *  Copyright (C) 2002 Roman Dementiev <dementiev@mpi-sb.mpg.de>
00007  *
00008  *  Distributed under the Boost Software License, Version 1.0.
00009  *  (See accompanying file LICENSE_1_0.txt or copy at
00010  *  http://www.boost.org/LICENSE_1_0.txt)
00011  **************************************************************************/
00012 
00013 #ifndef STXXL_SIMPLE_VECTOR_HEADER
00014 #define STXXL_SIMPLE_VECTOR_HEADER
00015 
00016 #include <stxxl/bits/noncopyable.h>
00017 #include <stxxl/bits/common/utils.h>
00018 
00019 
00020 __STXXL_BEGIN_NAMESPACE
00021 
00022 template <class _Tp /*, class _Alloc=__STL_DEFAULT_ALLOCATOR(_Tp) */>
00023 class simple_vector : private noncopyable
00024 {
00025     simple_vector()
00026     { }
00027 
00028 public:
00029     typedef size_t size_type;
00030     typedef _Tp value_type;
00031 //  typedef simple_alloc<_Tp, _Alloc> _data_allocator;
00032 
00033 protected:
00034     size_type _size;
00035     value_type * _array;
00036 
00037 public:
00038     typedef value_type * iterator;
00039     typedef const value_type * const_iterator;
00040     typedef value_type & reference;
00041     typedef const value_type & const_reference;
00042 
00043     simple_vector(size_type sz) : _size(sz)
00044     {
00045         //assert(sz);
00046         //    _array = _data_allocator.allocate(sz);
00047         _array = new _Tp[sz];
00048     }
00049     void swap(simple_vector & obj)
00050     {
00051         std::swap(_size, obj._size);
00052         std::swap(_array, obj._array);
00053     }
00054     ~simple_vector()
00055     {
00056         //    _data_allocator.deallocate(_array,_size);
00057         delete[] _array;
00058     }
00059     iterator begin()
00060     {
00061         return _array;
00062     }
00063     const_iterator begin() const
00064     {
00065         return _array;
00066     }
00067     const_iterator cbegin() const
00068     {
00069         return begin();
00070     }
00071     iterator end()
00072     {
00073         return _array + _size;
00074     }
00075     const_iterator end() const
00076     {
00077         return _array + _size;
00078     }
00079     const_iterator cend() const
00080     {
00081         return end();
00082     }
00083     size_type size() const
00084     {
00085         return _size;
00086     }
00087     reference operator [] (size_type i)
00088     {
00089         return *(begin() + i);
00090     }
00091     const_reference operator [] (size_type i) const
00092     {
00093         return *(begin() + i);
00094     }
00095 };
00096 __STXXL_END_NAMESPACE
00097 
00098 namespace std
00099 {
00100     template <class Tp_>
00101     void swap(stxxl::simple_vector<Tp_> & a,
00102               stxxl::simple_vector<Tp_> & b)
00103     {
00104         a.swap(b);
00105     }
00106 }
00107 
00108 #endif // !STXXL_SIMPLE_VECTOR_HEADER