1 /* ----------------------------------------------------------------------------- 2 * std_vector.i 3 * ----------------------------------------------------------------------------- */ 4 5 %include <std_common.i> 6 7 %{ 8 #include <vector> 9 #include <stdexcept> 10 %} 11 12 namespace 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 %rename(isEmpty) empty; 25 bool empty() const; 26 void clear(); 27 %rename(add) push_back; 28 void push_back(const value_type& x); 29 %extend { 30 const_reference get(int i) throw (std::out_of_range) { 31 int size = int(self->size()); 32 if (i>=0 && i<size) 33 return (*self)[i]; 34 else 35 throw std::out_of_range("vector index out of range"); 36 } 37 void set(int i, const value_type& val) throw (std::out_of_range) { 38 int size = int(self->size()); 39 if (i>=0 && i<size) 40 (*self)[i] = val; 41 else 42 throw std::out_of_range("vector index out of range"); 43 } 44 } 45 }; 46 47 // bool specialization 48 template<> class vector<bool> { 49 public: 50 typedef size_t size_type; 51 typedef bool value_type; 52 typedef bool const_reference; 53 vector(); 54 vector(size_type n); 55 size_type size() const; 56 size_type capacity() const; 57 void reserve(size_type n); 58 %rename(isEmpty) empty; 59 bool empty() const; 60 void clear(); 61 %rename(add) push_back; 62 void push_back(const value_type& x); 63 %extend { 64 const_reference get(int i) throw (std::out_of_range) { 65 int size = int(self->size()); 66 if (i>=0 && i<size) 67 return (*self)[i]; 68 else 69 throw std::out_of_range("vector index out of range"); 70 } 71 void set(int i, const value_type& val) throw (std::out_of_range) { 72 int size = int(self->size()); 73 if (i>=0 && i<size) 74 (*self)[i] = val; 75 else 76 throw std::out_of_range("vector index out of range"); 77 } 78 } 79 }; 80 } 81 82 %define specialize_std_vector(T) 83 #warning "specialize_std_vector - specialization for type T no longer needed" 84 %enddef 85 86