PageRenderTime 18ms CodeModel.GetById 15ms app.highlight 1ms RepoModel.GetById 1ms app.codeStats 0ms

/trunk/Lib/php/std_vector.i

#
Swig | 102 lines | 91 code | 8 blank | 3 comment | 0 complexity | 8c459adc3b3fe21cedef5fd5208013af MD5 | raw file
  1/* -----------------------------------------------------------------------------
  2 * std_vector.i
  3 * ----------------------------------------------------------------------------- */
  4
  5%include <std_common.i>
  6
  7%{
  8#include <vector>
  9#include <stdexcept>
 10%}
 11
 12namespace std {
 13
 14  template<class T> class vector {
 15  public:
 16    typedef size_t size_type;
 17    typedef T value_type;
 18    typedef const value_type& const_reference;
 19    vector();
 20    vector(size_type n);
 21    size_type size() const;
 22    size_type capacity() const;
 23    void reserve(size_type n);
 24    void clear();
 25    %rename(push) push_back;
 26    void push_back(const value_type& x);
 27    %extend {
 28      bool is_empty() const {
 29        return $self->empty();
 30      }
 31      T pop() throw (std::out_of_range) {
 32        if (self->size() == 0)
 33          throw std::out_of_range("pop from empty vector");
 34        T x = self->back();
 35        self->pop_back();
 36        return x;
 37      }
 38      const_reference get(int i) throw (std::out_of_range) {
 39        int size = int(self->size());
 40        if (i>=0 && i<size)
 41          return (*self)[i];
 42        else
 43          throw std::out_of_range("vector index out of range");
 44      }
 45      void set(int i, const value_type& val) throw (std::out_of_range) {
 46        int size = int(self->size());
 47        if (i>=0 && i<size)
 48          (*self)[i] = val;
 49        else
 50          throw std::out_of_range("vector index out of range");
 51      }
 52    }
 53  };
 54
 55  // bool specialization
 56  template<> class vector<bool> {
 57  public:
 58    typedef size_t size_type;
 59    typedef bool value_type;
 60    typedef bool const_reference;
 61    vector();
 62    vector(size_type n);
 63    size_type size() const;
 64    size_type capacity() const;
 65    void reserve(size_type n);
 66    void clear();
 67    %rename(push) push_back;
 68    void push_back(const value_type& x);
 69    %extend {
 70      bool is_empty() const {
 71        return $self->empty();
 72      }
 73      bool pop() throw (std::out_of_range) {
 74        if (self->size() == 0)
 75          throw std::out_of_range("pop from empty vector");
 76        bool x = self->back();
 77        self->pop_back();
 78        return x;
 79      }
 80      const_reference get(int i) throw (std::out_of_range) {
 81        int size = int(self->size());
 82        if (i>=0 && i<size)
 83          return (*self)[i];
 84        else
 85          throw std::out_of_range("vector index out of range");
 86      }
 87      void set(int i, const value_type& val) throw (std::out_of_range) {
 88        int size = int(self->size());
 89        if (i>=0 && i<size)
 90          (*self)[i] = val;
 91        else
 92          throw std::out_of_range("vector index out of range");
 93      }
 94    }
 95  };
 96}
 97
 98%define specialize_std_vector(T)
 99#warning "specialize_std_vector - specialization for type T no longer needed"
100%enddef
101
102