PageRenderTime 52ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/trunk/Lib/php/std_vector.i

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