1a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include <vector>
2a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include <algorithm>
3a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include <string>
4a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
5a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  include <rope>
6a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
7a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
8a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  include <slist>
9a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
10a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include <list>
11a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include <deque>
12a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include <set>
13a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include <map>
14a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if defined (STLPORT)
15a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  include <unordered_set>
16a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  include <unordered_map>
17a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
18a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
19a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  include <hash_set>
20a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  include <hash_map>
21a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
22a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include <queue>
23a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include <stack>
24a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
25a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#include "mvctor_test.h"
26a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
27a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
28a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerusing namespace std;
29a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  if defined (STLPORT)
30a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerusing namespace std::tr1;
31a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  endif
32a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
33a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
34a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_NO_MOVE_SEMANTIC)
35a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
36a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  if defined (__GNUC__) && defined (_STLP_USE_NAMESPACES)
37a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// libstdc++ sometimes exposed its own __true_type in
38a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner// global namespace resulting in an ambiguity.
39a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#    define __true_type std::__true_type
40a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#    define __false_type std::__false_type
41a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  endif
42a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
43a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerstatic bool type_to_bool(__true_type)
44a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ return true; }
45a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerstatic bool type_to_bool(__false_type)
46a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ return false; }
47a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
48a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnertemplate <class _Tp>
49a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerstatic bool is_movable(const _Tp&) {
50a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  typedef typename __move_traits<_Tp>::implemented _MovableTp;
51a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  return type_to_bool(_MovableTp());
52a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
53a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
54a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnertemplate <class _Tp>
55a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerstatic bool is_move_complete(const _Tp&) {
56a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  typedef __move_traits<_Tp> _TpMoveTraits;
57a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  typedef typename _TpMoveTraits::complete _TpMoveComplete;
58a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  return type_to_bool(_TpMoveComplete());
59a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
60a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
61a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerstruct specially_allocated_struct {
62a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  bool operator < (const specially_allocated_struct&) const;
63a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  if defined (__DMC__) // slist<_Tp,_Alloc>::remove error
64a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  bool operator==(const specially_allocated_struct&) const;
65a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  endif
66a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner};
67a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
68a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if defined (__DMC__)
69a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerbool specially_allocated_struct::operator < (const specially_allocated_struct&) const
70a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{ return false; }
71a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
72a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
73a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnerstruct struct_with_specialized_less {};
74a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
75a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  if defined (_STLP_USE_NAMESPACES)
76a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnernamespace std {
77a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  endif
78a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  _STLP_TEMPLATE_NULL
79a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  class allocator<specially_allocated_struct> {
80a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //This allocator just represent what a STLport could do and in this
81a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //case the STL containers implemented with it should still be movable
82a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //but not completely as we cannot do any hypothesis on what is in this
83a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //allocator.
84a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  public:
85a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef specially_allocated_struct value_type;
86a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef value_type *       pointer;
87a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef const value_type* const_pointer;
88a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef value_type&       reference;
89a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef const value_type& const_reference;
90a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef size_t     size_type;
91a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef ptrdiff_t  difference_type;
92a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  if defined (_STLP_MEMBER_TEMPLATE_CLASSES)
93a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    template <class _Tp1> struct rebind {
94a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner      typedef allocator<_Tp1> other;
95a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    };
96a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  endif
97a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    allocator() _STLP_NOTHROW {}
98a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  if defined (_STLP_MEMBER_TEMPLATES)
99a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    template <class _Tp1> allocator(const allocator<_Tp1>&) _STLP_NOTHROW {}
100a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  endif
101a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    allocator(const allocator&) _STLP_NOTHROW {}
102a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    ~allocator() _STLP_NOTHROW {}
103a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    pointer address(reference __x) const { return &__x; }
104a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    const_pointer address(const_reference __x) const { return &__x; }
105a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    pointer allocate(size_type, const void* = 0) { return 0; }
106a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    void deallocate(pointer, size_type) {}
107a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    size_type max_size() const _STLP_NOTHROW  { return 0; }
108a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    void construct(pointer, const_reference) {}
109a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    void destroy(pointer) {}
110a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  };
111a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
112a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  _STLP_TEMPLATE_NULL
113a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  struct less<struct_with_specialized_less> {
114a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    bool operator() (struct_with_specialized_less const&,
115a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner                     struct_with_specialized_less const&) const;
116a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  };
117a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
118a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
119a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#    if !defined (_STLP_NO_MOVE_SEMANTIC)
120a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#      if defined (__BORLANDC__) && (__BORLANDC__ >= 0x564)
121a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  _STLP_TEMPLATE_NULL
122a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  struct __move_traits<vector<specially_allocated_struct> > {
123a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef __true_type implemented;
124a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef __false_type complete;
125a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  };
126a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  _STLP_TEMPLATE_NULL
127a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  struct __move_traits<deque<specially_allocated_struct> > {
128a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef __true_type implemented;
129a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef __false_type complete;
130a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  };
131a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  _STLP_TEMPLATE_NULL
132a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  struct __move_traits<list<specially_allocated_struct> > {
133a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef __true_type implemented;
134a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef __false_type complete;
135a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  };
136a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  _STLP_TEMPLATE_NULL
137a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  struct __move_traits<slist<specially_allocated_struct> > {
138a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef __true_type implemented;
139a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef __false_type complete;
140a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  };
141a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  _STLP_TEMPLATE_NULL
142a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  struct __move_traits<less<struct_with_specialized_less> > {
143a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef __true_type implemented;
144a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef __false_type complete;
145a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  };
146a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  _STLP_TEMPLATE_NULL
147a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  struct __move_traits<set<specially_allocated_struct> > {
148a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef __true_type implemented;
149a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef __false_type complete;
150a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  };
151a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  _STLP_TEMPLATE_NULL
152a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  struct __move_traits<multiset<specially_allocated_struct> > {
153a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef __true_type implemented;
154a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    typedef __false_type complete;
155a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  };
156a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#      endif
157a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#    endif
158a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  endif
159a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
160a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  if defined (_STLP_USE_NAMESPACES)
161a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
162a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  endif
163a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
164a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
165a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid MoveConstructorTest::movable_declaration()
166a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
167a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS) && \
168a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner                         !defined (_STLP_NO_MOVE_SEMANTIC)
169a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  //This test purpose is to check correct detection of the STL movable
170a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  //traits declaration
171a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  {
172a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //string, wstring:
173a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(string()) );
174a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
175a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_move_complete(string()) );
176a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  else
177a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( !is_move_complete(string()) );
178a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  endif
179a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  if defined (_STLP_HAS_WCHAR_T)
180a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(wstring()) );
181a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#    if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
182a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_move_complete(wstring()) );
183a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#    else
184a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( !is_move_complete(wstring()) );
185a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#    endif
186a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  endif
187a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
188a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
189a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
190a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  {
191a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //crope, wrope:
192a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(crope()) );
193a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#    if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
194a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_move_complete(crope()) );
195a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#    else
196a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( !is_move_complete(crope()) );
197a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#    endif
198a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#    if defined (_STLP_HAS_WCHAR_T)
199a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(wrope()) );
200a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#      if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
201a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_move_complete(wrope()) );
202a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#      else
203a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( !is_move_complete(wrope()) );
204a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#      endif
205a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#    endif
206a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
207a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  endif
208a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
209a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  {
210a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //vector:
211a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(vector<char>()) );
212a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(vector<specially_allocated_struct>()) );
213a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
214a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_move_complete(vector<char>()) );
215a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( !is_move_complete(vector<specially_allocated_struct>()) );
216a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  else
217a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( !is_move_complete(vector<char>()) );
218a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  endif
219a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
220a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
221a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  {
222a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //deque:
223a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(deque<char>()) );
224a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(deque<specially_allocated_struct>()) );
225a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
226a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_move_complete(deque<char>()) );
227a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( !is_move_complete(deque<specially_allocated_struct>()) );
228a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  else
229a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( !is_move_complete(deque<char>()) );
230a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  endif
231a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
232a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
233a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  {
234a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //list:
235a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(list<char>()) );
236a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(list<specially_allocated_struct>()) );
237a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
238a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_move_complete(list<char>()) );
239a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( !is_move_complete(list<specially_allocated_struct>()) );
240a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  else
241a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( !is_move_complete(list<char>()) );
242a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  endif
243a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
244a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
245a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
246a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  {
247a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //slist:
248a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(slist<char>()) );
249a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(slist<specially_allocated_struct>()) );
250a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#    if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
251a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_move_complete(slist<char>()) );
252a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( !is_move_complete(slist<specially_allocated_struct>()) );
253a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#    else
254a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( !is_move_complete(slist<char>()) );
255a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#    endif
256a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
257a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  endif
258a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
259a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  {
260a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //queue:
261a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(queue<char>()) );
262a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(queue<specially_allocated_struct>()) );
263a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
264a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_move_complete(queue<char>()) );
265a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( !is_move_complete(queue<specially_allocated_struct>()) );
266a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  else
267a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( !is_move_complete(queue<char>()) );
268a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  endif
269a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
270a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
271a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  {
272a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //stack:
273a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(stack<char>()) );
274a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(stack<specially_allocated_struct>()) );
275a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
276a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_move_complete(stack<char>()) );
277a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( !is_move_complete(stack<specially_allocated_struct>()) );
278a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  else
279a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( !is_move_complete(stack<char>()) );
280a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  endif
281a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
282a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
283a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
284a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
285a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
286a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid MoveConstructorTest::movable_declaration_assoc()
287a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
288a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS) && \
289a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner                         !defined (_STLP_NO_MOVE_SEMANTIC)
290a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  {
291a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //associative containers, set multiset, map, multimap:
292a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
293a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //For associative containers it is important that less is correctly recognize as
294a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //the STLport less or a user specialized less:
295a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
296a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_move_complete(less<char>()) );
297a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  endif
298a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( !is_move_complete(less<struct_with_specialized_less>()) );
299a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
300a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //set
301a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(set<char>()) );
302a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(set<specially_allocated_struct>()) );
303a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
304a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_move_complete(set<char>()) );
305a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( !is_move_complete(set<specially_allocated_struct>()) );
306a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  else
307a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( !is_move_complete(set<char>()) );
308a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  endif
309a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
310a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //multiset
311a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(multiset<char>()) );
312a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(multiset<specially_allocated_struct>()) );
313a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
314a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_move_complete(multiset<char>()) );
315a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( !is_move_complete(multiset<specially_allocated_struct>()) );
316a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  else
317a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( !is_move_complete(multiset<char>()) );
318a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  endif
319a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
320a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //map
321a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(map<char, char>()) );
322a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(map<specially_allocated_struct, char>()) );
323a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
324a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_move_complete(map<char, char>()) );
325a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //Here even if allocator has been specialized for specially_allocated_struct
326a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //this pecialization won't be used in default map instanciation as the default
327a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //allocator is allocator<pair<specially_allocated_struct, char> >
328a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_move_complete(map<specially_allocated_struct, char>()) );
329a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  else
330a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( !is_move_complete(map<char, char>()) );
331a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  endif
332a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
333a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //multimap
334a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(multimap<char, char>()) );
335a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(multimap<specially_allocated_struct, char>()) );
336a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
337a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_move_complete(multimap<char, char>()) );
338a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //Idem map remark
339a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_move_complete(multimap<specially_allocated_struct, char>()) );
340a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  else
341a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( !is_move_complete(multimap<char, char>()) );
342a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  endif
343a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
344a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
345a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
346a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
347a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turnervoid MoveConstructorTest::movable_declaration_hash()
348a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner{
349a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#if defined (STLPORT) && !defined (_STLP_DONT_SIMULATE_PARTIAL_SPEC_FOR_TYPE_TRAITS) && \
350a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner                         !defined (_STLP_NO_MOVE_SEMANTIC)
351a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  {
352a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //hashed containers, unordered_set unordered_multiset, unordered_map, unordered_multimap,
353a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //                   hash_set, hash_multiset, hash_map, hash_multimap:
354a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
355a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    //We only check that they are movable, completness is not yet supported
356a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(unordered_set<char>()) );
357a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(unordered_multiset<char>()) );
358a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(unordered_map<char, char>()) );
359a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(unordered_multimap<char, char>()) );
360a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  if defined (STLPORT) && !defined (_STLP_NO_EXTENSIONS)
361a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(hash_set<char>()) );
362a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(hash_multiset<char>()) );
363a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(hash_map<char, char>()) );
364a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner    CPPUNIT_ASSERT( is_movable(hash_multimap<char, char>()) );
365a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#  endif
366a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner  }
367a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner#endif
368a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner}
369a9225dc81bae267b3454f3676a9108ecb4c9264fDavid 'Digit' Turner
370