PageRenderTime 48ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/trunk/Lib/java/std_vector.i

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