array_impl.hpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef BOOST_NUMERIC_BINDINGS_TRAITS_DETAIL_ARRAY_IMPL_HPP
00015 #define BOOST_NUMERIC_BINDINGS_TRAITS_DETAIL_ARRAY_IMPL_HPP
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 #include <new>
00041 #include <boost/noncopyable.hpp>
00042
00043 namespace boost { namespace numeric { namespace bindings {
00044
00045 namespace traits { namespace detail {
00046
00047 template <typename T>
00048 class array : private noncopyable {
00049 public:
00050
00051 array (int n) {
00052 stg = new (std::nothrow) T[n];
00053 sz = (stg != 0) ? n : 0;
00054 }
00055 ~array() { delete[] stg; }
00056
00057 int size() const { return sz; }
00058 bool valid() const { return stg != 0; }
00059 void resize (int n) {
00060 delete[] stg;
00061 stg = new (std::nothrow) T[n];
00062 sz = (stg != 0) ? n : 0;
00063 }
00064
00065 T* storage() { return stg; }
00066 T const* storage() const { return stg; }
00067
00068 T& operator[] (int i) { return stg[i]; }
00069 T const& operator[] (int i) const { return stg[i]; }
00070
00071 private:
00072 int sz;
00073 T* stg;
00074 };
00075
00076 }}
00077
00078 }}}
00079
00080 #endif