~ubuntu-branches/ubuntu/oneiric/swig1.3/oneiric

« back to all changes in this revision

Viewing changes to Lib/php/std_vector.i

  • Committer: Bazaar Package Importer
  • Author(s): Benjamin Drung
  • Date: 2009-11-15 14:00:28 UTC
  • mfrom: (1.2.9 upstream) (2.1.4 squeeze)
  • Revision ID: james.westby@ubuntu.com-20091115140028-me7amr2rie8zz1xn
Tags: 1.3.40-2ubuntu1
* Merge from Debian testing (LP: #356529), remaining changes:
  - Drop libchicken-dev from the build-depends (it's in universe)
  - Remove Pike from package description and from configure flags
  - drop "--without-mzscheme", we don't have it in our build-depends
  - use php-config5
  - Clean Runtime/ as well.
  - debian/rules (clean): Remove Lib/ocaml/swigp4.ml.
* debian/rules: Remove hardcoded python version.
* Remove upper limit for python from Build-Depends.

Show diffs side-by-side

added added

removed removed

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