Home | History | Annotate | Download | only in std
      1 %{
      2 #include <algorithm>
      3 %}
      4 
      5 //
      6 // std::carray - is really an extension to the 'std' namespace.
      7 // 
      8 // A simple fix C array wrapper, more or less as presented in
      9 //
     10 //   "The C++ Standarf Library", by Nicolai M. Josuttis
     11 //
     12 // which is also derived from the example in
     13 //
     14 //   "The C++ Programming Language", by Bjarne Stroustup.
     15 //
     16 
     17 %inline %{
     18 namespace std {    
     19   template <class _Type, size_t _Size>
     20   class carray 
     21   {
     22   public:
     23     typedef _Type value_type;    
     24     typedef size_t size_type;
     25     
     26     typedef _Type * iterator;
     27     typedef const _Type * const_iterator;
     28     
     29     carray() { }
     30     
     31     carray(const carray& c) {
     32       std::copy(c.v, c.v + size(), v);
     33     }
     34     
     35     template <class _Iterator>
     36     carray(_Iterator first, _Iterator last) {
     37       assign(first, last);
     38     }
     39 
     40     iterator begin() { return v; }
     41     iterator end() { return v + _Size; }
     42 
     43     const_iterator begin() const { return v; }
     44     const_iterator end() const { return v + _Size; }
     45     
     46     _Type& operator[](size_t i) { return v[i]; }
     47     const _Type& operator[](size_t i) const { return v[i]; }
     48 
     49     static size_t size() { return _Size; }    
     50 
     51     template <class _Iterator>
     52     void assign(_Iterator first, _Iterator last)  {
     53       if (std::distance(first,last) == size()) {
     54 	std::copy(first, last, v);
     55       } else {
     56 	throw std::length_error("bad range length");
     57       }
     58     }
     59       
     60   private:
     61     _Type v[_Size];
     62   };
     63 }
     64 %}
     65