1 // iterator stl/clr header
2 #ifndef _CLI_ITERATOR_
3  #define _CLI_ITERATOR_
4 #include <cliext/xutility>
5
6 namespace cliext {
7 //
8 //    TEMPLATE FUNCTION _Unchecked
9 //
10 template<typename _Iter_t> inline
11     _Iter_t _Unchecked(_Iter_t _Iter)
12     {    // return unknown iterator unchanged
13     return (_Iter);
14     }
15
16 //
17 // TEMPLATE VALUE CLASS ConstBidirectionalIterator
18 //
19 template<typename _Cont_t>
20     value class ConstBidirectionalIterator
21     :    public _STLCLR Generic::IBidirectionalIterator<
22             typename _Cont_t::value_type>
23     {    // iterator for nonmutable bidirectional container
24 public:
25     // types
26     typedef typename _Cont_t::value_type _Value_t;
27     typedef ConstBidirectionalIterator<_Cont_t> _Mytype_t;
28     typedef _STLCLR Generic::IBidirectionalIterator<_Value_t> _Myiter_t;
29     typedef typename _Cont_t::node_type node_type;
30
31     typedef bidirectional_iterator_tag iterator_category;
32     typedef _Value_t value_type;
33     typedef int difference_type;
34     typedef value_type% pointer;
35     typedef value_type% reference;
36     typedef value_type% const_reference;
37
38     // constructors and special members
39     ConstBidirectionalIterator(node_type^ _Node)
40         :    _Mynode(_Node)
41         {    // construct from node
42         }
43
44     // generic conversions
45     typedef _STLCLR Generic::ConstContainerBidirectionalIterator<_Value_t>
46         _Mygeniter_t;
47
48     ConstBidirectionalIterator(_Mygeniter_t% _Right)
49         :    _Mynode((node_type^)_Right.get_node())
50         {    // construct by copying a generic iterator
51         }
52
53     operator _Mygeniter_t()
Lines 54 ... 4216 are skipped.
4217
4218 // iterator generators
4219     iterator make_iterator(size_type _Offset)
4220         {    // return iterator for offset
4221         return (_Myiter_t(this, _Offset));
4222         }
4223
4224     iterator begin()
4225         {    // return iterator for beginning of mutable sequence
4226         return (make_iterator(0));
4227         }
4228
4229     iterator end()
4230         {    // return iterator for end of mutable sequence
4231         return (make_iterator(_Myarray->Length));
4232         }
4233
4234     // size controllers
4235     int size()
4236         {    // return length of sequence
4237         return (_Myarray->Length);
4238         }
4239
4240 _STLCLR_FIELD_ACCESS:
4241     _Myarray_t^ _Myarray;    // the wrapped array
4242     };
4243
4244 //
4245 // TEMPLATE FUNCTION _Iter_container
4246 //
4247 template<typename _Iter_t> inline
4248     System::Object^ _Iter_container(_Iter_t% _Next)
4249     {    // get container for arbitrary iterator
4250     return (_Next.container());
4251     }
4252
4253 template<typename _Iter_t> inline
4254     System::Object^ _Iter_container(_Iter_t^ _Next)
4255     {    // get container for arbitrary iterator
4256     return (_Next->container());
4257     }
4258 }    // namespace cliext
4259 #endif // _CLI_ITERATOR_
4260
4261 /*
4262  * Copyright (c) 2004-2007 by Dinkumware, Ltd.  ALL RIGHTS RESERVED.
4263  * Consult your license regarding permissions and restrictions.
4264 V5.03:0009 */
4265