1555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot/**
2555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * @file   std_queue.i
3555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * @date   Sun May  6 01:48:07 2007
4555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot *
5555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot * @brief  A wrapping of std::queue for Ruby.
6555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot *
7555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot *
8555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot */
9555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
10555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%include <std_container.i>
11555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
12555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot// Queue
13555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
14555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%define %std_queue_methods(queue...)
15555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot  queue();
16555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot  queue( const _Sequence& );
17555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
18555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot  bool empty() const;
19555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot  size_type size() const;
20555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot  const value_type& front() const;
21555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot  const value_type& back() const;
22555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot  void pop();
23555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot  void push( const value_type& );
24555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%enddef
25555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
26555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%define %std_queue_methods_val(queue...)
27555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot  %std_queue_methods(queue)
28555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%enddef
29555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
30555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot// ------------------------------------------------------------------------
31555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot// std::queue
32555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot//
33555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot// const declarations are used to guess the intent of the function being
34555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot// exported; therefore, the following rationale is applied:
35555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot//
36555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot//   -- f(std::queue<T>), f(const std::queue<T>&):
37555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot//      the parameter being read-only, either a sequence or a
38555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot//      previously wrapped std::queue<T> can be passed.
39555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot//   -- f(std::queue<T>&), f(std::queue<T>*):
40555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot//      the parameter may be modified; therefore, only a wrapped std::queue
41555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot//      can be passed.
42555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot//   -- std::queue<T> f(), const std::queue<T>& f():
43555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot//      the queue is returned by copy; therefore, a sequence of T:s
44555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot//      is returned which is most easily used in other functions
45555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot//   -- std::queue<T>& f(), std::queue<T>* f():
46555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot//      the queue is returned by reference; therefore, a wrapped std::queue
47555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot//      is returned
48555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot//   -- const std::queue<T>* f(), f(const std::queue<T>*):
49555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot//      for consistency, they expect and return a plain queue pointer.
50555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot// ------------------------------------------------------------------------
51555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
52555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%{
53555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#include <queue>
54555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot%}
55555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
56555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot// exported classes
57555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
58555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robotnamespace std {
59555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
60555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot  template<class _Tp, class _Sequence = std::deque<_Tp> >
61555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot  class queue {
62555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot  public:
63555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    typedef size_t size_type;
64555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    typedef _Tp value_type;
65555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    typedef value_type& reference;
66555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    typedef const value_type& const_reference;
67555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    typedef _Sequence container_type;
68555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
69555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    %traits_swigtype(_Tp);
70555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
71555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    %fragment(SWIG_Traits_frag(std::queue<_Tp, _Sequence >), "header",
72555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	      fragment=SWIG_Traits_frag(_Tp),
73555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	      fragment="StdQueueTraits") {
74555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot      namespace swig {
75555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	template <>  struct traits<std::queue<_Tp, _Sequence > > {
76555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	  typedef pointer_category category;
77555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	  static const char* type_name() {
78555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	    return "std::queue<" #_Tp "," #_Sequence " >";
79555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	  }
80555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	};
81555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot      }
82555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    }
83555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
84555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    %typemap_traits_ptr(SWIG_TYPECHECK_QUEUE, std::queue<_Tp, _Sequence >);
85555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
86555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#ifdef %swig_queue_methods
87555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    // Add swig/language extra methods
88555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    %swig_queue_methods(std::queue<_Tp, _Sequence >);
89555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#endif
90555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
91555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    %std_queue_methods(queue);
92555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot  };
93555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
94555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot  template<class _Tp, class _Sequence >
95555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot  class queue<_Tp*, _Sequence > {
96555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot  public:
97555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    typedef size_t size_type;
98555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    typedef _Tp value_type;
99555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    typedef value_type& reference;
100555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    typedef const value_type& const_reference;
101555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    typedef _Sequence container_type;
102555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
103555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    %traits_swigtype(_Tp);
104555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
105555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    %fragment(SWIG_Traits_frag(std::queue<_Tp*, _Sequence >), "header",
106555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	      fragment=SWIG_Traits_frag(_Tp),
107555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	      fragment="StdQueueTraits") {
108555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot      namespace swig {
109555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	template <>  struct traits<std::queue<_Tp*, _Sequence > > {
110555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	  typedef value_category category;
111555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	  static const char* type_name() {
112555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	    return "std::queue<" #_Tp "," #_Sequence " * >";
113555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	  }
114555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot	};
115555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot      }
116555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    }
117555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
118555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    %typemap_traits_ptr(SWIG_TYPECHECK_QUEUE, std::queue<_Tp*, _Sequence >);
119555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
120555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#ifdef %swig_queue_methods_val
121555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    // Add swig/language extra methods
122555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    %swig_queue_methods_val(std::queue<_Tp*, _Sequence >);
123555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot#endif
124555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
125555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot    %std_queue_methods_val(std::queue<_Tp*, _Sequence >);
126555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot  };
127555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
128555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot}
129555d6a58708babe6bb79b5824ef24eb1f37f708android-build-team Robot
130