|
|
|
| 1 |
|
// stack stl/clr header |
| 2 |
|
#ifndef _CLI_STACK_ |
| 3 |
|
#define _CLI_STACK_ |
| 4 |
|
#include <cliext/deque> // for default stack container |
| 5 |
|
#include <cliext/iterator> |
| 6 |
|
|
| 7 |
|
namespace cliext { |
| 8 |
|
namespace impl { |
| 9 |
|
// |
| 10 |
|
// TEMPLATE CLASS stack_base |
| 11 |
|
// |
| 12 |
|
template<typename _Value_t, |
| 13 |
|
typename _Cont_t> |
| 14 |
|
ref class stack_base |
| 15 |
|
: public _STLCLR IStack<_Value_t, |
| 16 |
|
typename _Container_traits<_Cont_t>::generic_container_handle> |
| 17 |
|
{ // LIFO queue of elements |
| 18 |
|
public: |
| 19 |
|
// types |
| 20 |
|
typedef stack_base<_Value_t, _Cont_t> _Mytype_t; |
| 21 |
|
typedef _STLCLR IStack<_Value_t, |
| 22 |
|
typename _Container_traits<_Cont_t>::generic_container_handle> _Mycont_it; |
| 23 |
|
typedef cli::array<_Value_t> _Myarray_t; |
| 24 |
|
|
| 25 |
|
typedef int size_type; |
| 26 |
|
typedef int difference_type; |
| 27 |
|
typedef _Value_t value_type; |
| 28 |
|
typedef value_type% reference; |
| 29 |
|
typedef value_type% const_reference; |
| 30 |
|
|
| 31 |
|
typedef _Mycont_it generic_container; |
| 32 |
|
typedef value_type generic_value; |
| 33 |
|
|
| 34 |
|
typedef typename _Dehandle<_Cont_t>::type container_type; |
| 35 |
|
|
| 36 |
|
// basics |
| 37 |
|
stack_base() |
| 38 |
|
: c(gcnew container_type) |
| 39 |
|
{ // default constructor |
| 40 |
|
} |
| 41 |
|
|
| 42 |
|
stack_base% operator=(stack_base% _Right) |
| 43 |
|
{ // assign |
| 44 |
|
assign(_Right); |
| 45 |
|
return (*this); |
| 46 |
|
} |
| 47 |
|
|
| 48 |
|
operator _Mycont_it^() |
| 49 |
|
{ // convert to interface |
| 50 |
|
return (this); |
| 51 |
|
} |
| 52 |
|
|
| 53 |
|
// constructors |
| 376 |
|
} |
| 377 |
|
|
| 378 |
|
template<typename _Value_t, |
| 379 |
|
typename _Cont_t> |
| 380 |
|
bool operator!=(stack<_Value_t, _Cont_t>% _Left, |
| 381 |
|
stack<_Value_t, _Cont_t>% _Right) |
| 382 |
|
{ // test if _Left != _Right |
| 383 |
|
return (!(_Left == _Right)); |
| 384 |
|
} |
| 385 |
|
|
| 386 |
|
template<typename _Value_t, |
| 387 |
|
typename _Cont_t> |
| 388 |
|
bool operator<(stack<_Value_t, _Cont_t>% _Left, |
| 389 |
|
stack<_Value_t, _Cont_t>% _Right) |
| 390 |
|
{ // test if _Left < _Right |
| 391 |
|
return (*_Left.get_container() < *_Right.get_container()); |
| 392 |
|
} |
| 393 |
|
|
| 394 |
|
template<typename _Value_t, |
| 395 |
|
typename _Cont_t> |
| 396 |
|
bool operator>=(stack<_Value_t, _Cont_t>% _Left, |
| 397 |
|
stack<_Value_t, _Cont_t>% _Right) |
| 398 |
|
{ // test if _Left >= _Right |
| 399 |
|
return (!(_Left < _Right)); |
| 400 |
|
} |
| 401 |
|
|
| 402 |
|
template<typename _Value_t, |
| 403 |
|
typename _Cont_t> |
| 404 |
|
bool operator>(stack<_Value_t, _Cont_t>% _Left, |
| 405 |
|
stack<_Value_t, _Cont_t>% _Right) |
| 406 |
|
{ // test if _Left > _Right |
| 407 |
|
return (_Right < _Left); |
| 408 |
|
} |
| 409 |
|
|
| 410 |
|
template<typename _Value_t, |
| 411 |
|
typename _Cont_t> |
| 412 |
|
bool operator<=(stack<_Value_t, _Cont_t>% _Left, |
| 413 |
|
stack<_Value_t, _Cont_t>% _Right) |
| 414 |
|
{ // test if _Left <= _Right |
| 415 |
|
return (!(_Right < _Left)); |
| 416 |
|
} |
| 417 |
|
} // namespace cliext |
| 418 |
|
#endif // _CLI_STACK_ |
| 419 |
|
|
| 420 |
|
/* |
| 421 |
|
* Copyright (c) 2004-2007 by Dinkumware, Ltd. ALL RIGHTS RESERVED. |
| 422 |
|
* Consult your license regarding permissions and restrictions. |
| 423 |
|
V5.03:0009 */ |
| 424 |
|
|
|
|
|