summaryrefslogtreecommitdiff
path: root/TAO/TAO_IDL/include/utl_tmpl/utl_list.h
blob: b300298b93d2969bead8eb2b932fe8fcbb616c66 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
// $Id$

/*
 *======================================================================
 *
 *Copyright 1992 Sun Microsystems, Inc.
 *
 *The Interface Definition Language Compiler Front End (CFE) is made
 *available for use provided that this legend is included on all media and
 *documentation and as a part of the software program in whole or part.
 *Users may copy and extend functionality (but may not remove
 *functionality) of the Interface Definition Language CFE without charge,
 *but are not authorized to license or distribute it to anyone else except
 *as part of a product or program developed by the user or with the express
 *written consent of Sun Microsystems, Inc.
 *
 *The names of Sun Microsystems, Inc. and any of its subsidiaries may not
 *be used in advertising or publicity pertaining to distribution of
 *Interface Definition Language CFE as permitted herein.
 *
 *The Interface Definition Language CFE may not be exported outside the
 *United States without first obtaining the appropriate government
 *approvals.
 *
 *INTERFACE DEFINITION LANGUAGE CFE IS PROVIDED AS IS WITH NO WARRANTIES
 *OF ANY KIND INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND
 *FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR ARISING FROM A
 *COURSE OF DEALING, USAGE OR TRADE PRACTICE.
 *
 *Interface Definition Language CFE is provided with no support and
 *without any obligation on the part of Sun Microsystems, Inc. or any of
 *its subsidiaries or affiliates to assist in its use, correction,
 *modification or enhancement.
 *
 *SUN MICROSYSTEMS, INC. OR ANY OF ITS SUBSIDIARIES OR AFFILIATES SHALL
 *HAVE NO LIABILITY WITH RESPECT TO THE INFRINGEMENT OF COPYRIGHTS, TRADE
 *SECRETS OR ANY PATENTS BY INTERFACE DEFINITION LANGUAGE CFE OR ANY PART
 *THEREOF.
 *
 *IN NO EVENT WILL SUN MICROSYSTEMS, INC. OR ANY OF ITS SUBSIDIARIES OR
 *AFFILIATES BE LIABLE FOR ANY LOST REVENUE OR PROFITS OR OTHER SPECIAL,
 *INDIRECT AND CONSEQUENTIAL DAMAGES, EVEN IF SUN HAS BEEN ADVISED OF THE
 *POSSIBILITY OF SUCH DAMAGES.
 *
 *SunSoft, Inc.
 *2550 Garcia Avenue
 *Mountain View, California  94043
 *
 *
 *
 *
 *======================================================================
 */

#ifndef _UTL_LIST_UTL_LIST_HH
#define _UTL_LIST_UTL_LIST_HH

// utl_list.hh
//
// General single-linked lists

/*
** DEPENDENCIES: NONE
**
** USE: Included from util.hh
*/

// Forward declare active iterator for UTL_List
template<class L, class T> class UTL_ListActiveIterator;

template<class L, class T>
class   UTL_List
{
public:
  // Operations

  // Constructor(s)
  UTL_List(T *c, L *l);
  virtual ~UTL_List() {}

  // Smash last cdr pointer in "this" with l
  void                  nconc(L *l);

  // Copy the list starting at "this"
  L                     *copy();

  // Get list element
  T                     *head();

  // Get next list
  L                     *tail();

  // Set the list element
  void                  set_head(T *t);

  // Set next list
  void                  set_tail(L *l);

  // How long is this list?
  long                  length();

private:
  // Data
  T                     *pd_car_data;   // The next list
  L                     *pd_cdr_data;   // The next list

  // Operations
  long                  list_length(long n); // How long is it?

  // Friend class
  friend class          UTL_ListActiveIterator<L, T>; // Friend class

};

// Active iterator for lists
template<class L, class T>
class   UTL_ListActiveIterator
{
public:
  // Operations

  // Constructor(s)
  UTL_ListActiveIterator(UTL_List<L, T> *s);
  virtual ~UTL_ListActiveIterator() {}

  // Get current item
  T                     *item();

  // Get next list
  virtual void          next();

  // Are we at the end of this list?
  virtual long          is_done();

protected:
  // Data
  UTL_List<L, T>                *source;                // On what to iterate?
};

#endif           // _UTL_LIST_UTL_LIST_HH