(file) Return to Message.h CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

  1 karl  1.72 //%2006////////////////////////////////////////////////////////////////////////
  2 mike  1.4  //
  3 karl  1.58 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
  4            // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
  5            // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
  6 karl  1.48 // IBM Corp.; EMC Corporation, The Open Group.
  7 karl  1.58 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
  8            // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
  9 karl  1.62 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
 10            // EMC Corporation; VERITAS Software Corporation; The Open Group.
 11 karl  1.72 // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
 12            // EMC Corporation; Symantec Corporation; The Open Group.
 13 mike  1.4  //
 14            // Permission is hereby granted, free of charge, to any person obtaining a copy
 15 chip  1.24 // of this software and associated documentation files (the "Software"), to
 16            // deal in the Software without restriction, including without limitation the
 17            // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
 18 mike  1.4  // sell copies of the Software, and to permit persons to whom the Software is
 19            // furnished to do so, subject to the following conditions:
 20 kumpf 1.37 // 
 21 chip  1.24 // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
 22 mike  1.4  // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
 23            // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
 24 chip  1.24 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 25            // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 26            // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 27 mike  1.4  // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
 28            // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 29            //
 30            //==============================================================================
 31            //
 32            //%/////////////////////////////////////////////////////////////////////////////
 33            
 34            #ifndef Pegasus_Message_h
 35            #define Pegasus_Message_h
 36            
 37 mike  1.6  #include <Pegasus/Common/Config.h>
 38 mike  1.4  #include <iostream>
 39 mike  1.6  #include <cstring>
 40 kumpf 1.39 #include <Pegasus/Common/InternalException.h>
 41 kumpf 1.38 #include <Pegasus/Common/Linkage.h>
 42 w.white 1.68 #include <Pegasus/Common/TimeValue.h>
 43 w.white 1.63 #include <Pegasus/Common/CIMOperationType.h>
 44 kumpf   1.81 #include <Pegasus/Common/Threads.h>
 45 mike    1.76 #include <Pegasus/Common/Linkable.h>
 46 mike    1.4  
 47              PEGASUS_NAMESPACE_BEGIN
 48              
 49 kumpf   1.83 class PEGASUS_COMMON_LINKAGE MessageMask
 50 mike    1.6  {
 51 kumpf   1.83 public:
 52                  // Message type is indicated by the low order 20 bits.  For example:
 53                  // Uint32 messageType = flags & 0x000fffff;
 54                  static Uint32 type_legacy;
 55                  static Uint32 type_cimom;
 56                  static Uint32 type_service;
 57              
 58                  // Message handling is indicated by the high order 12 bits.  For example:
 59                  // Uint32 messageHandling = flags & 0xfff00000;
 60                  static Uint32 ha_request;
 61                  static Uint32 ha_reply;
 62                  static Uint32 ha_async;
 63 mike    1.6  };
 64              
 65 kumpf   1.40 enum HttpMethod
 66              {
 67                  HTTP_METHOD__POST,
 68                  HTTP_METHOD_M_POST
 69              };
 70              
 71 chip    1.24 /** The Message class and derived classes are used to pass messages between
 72 mike    1.4      modules. Messages are passed between modules using the message queues
 73                  (see MessageQueue class). Derived classes may add their own fields.
 74 kumpf   1.78     This base class defines a common type field, which is the type of
 75                  the message.
 76 mike    1.4  
 77                  The Message class also provides previous and next pointers which are
 78                  used to place the messages on a queue by the MessageQueue class.
 79              */
 80 mike    1.76 class PEGASUS_COMMON_LINKAGE Message : public Linkable
 81 mike    1.4  {
 82 mday    1.8     public:
 83 mike    1.4  
 84 mday    1.8        Message(
 85 mday    1.20 	 Uint32 type,
 86              	 Uint32 destination = 0,
 87 kumpf   1.83 	 Uint32 mask = MessageMask::type_legacy)
 88 chip    1.24 	 :
 89              	 _type(type),
 90 mday    1.8  	 _mask(mask),
 91 kumpf   1.45          _httpMethod (HTTP_METHOD__POST),
 92 j.alex  1.70          _close_connect(false),
 93 mike    1.80 	_last_thread_id(Threads::self()),
 94 mday    1.20 	 _async(0),
 95 brian.campbell 1.55 	 dest(destination),
 96                     	 _isComplete(true), 
 97                     	 _index(0)
 98 chip           1.24       {
 99 mday           1.8  
100                           }
101 mike           1.6  
102 mday           1.32       Message & operator = ( const Message & msg)
103                           {
104                     	 if (this != &msg)
105                     	 {
106                     	    _type = msg._type;
107                     	    _mask = msg._mask;
108 mday           1.44 	    _last_thread_id = msg._last_thread_id;
109 kumpf          1.82 	    _async = 0;
110 mday           1.32 	    dest = msg.dest;
111 brian.campbell 1.55 			_httpMethod = msg._httpMethod;
112                     			_index = msg._index;
113                     			_isComplete = msg._isComplete;
114 mday           1.44 	    
115 mday           1.32 	 }
116                     	 return *this;
117                           }
118 chip           1.34 
119 chip           1.24 
120                           virtual ~Message();
121 j.alex         1.70       Boolean getCloseConnect() const { return _close_connect; }
122                           void setCloseConnect(Boolean close_connect)
123                           {
124                               _close_connect = close_connect;
125                           }
126 mike           1.4  
127 mday           1.8        Uint32 getType() const { return _type; }
128 mike           1.4  
129 mday           1.8        void setType(Uint32 type) { _type = type; }
130 mike           1.4  
131 mday           1.8        Uint32 getMask() const { return _mask; }
132 chip           1.24 
133 mday           1.8        void setMask(Uint32 mask) { _mask = mask; }
134 chip           1.24 
135 kumpf          1.40       HttpMethod getHttpMethod() const { return _httpMethod; }
136                     
137                           void setHttpMethod(HttpMethod httpMethod) {_httpMethod = httpMethod;}
138                     
139 w.white        1.63       
140 karl           1.61 #ifndef PEGASUS_DISABLE_PERFINST
141 sage           1.30 //
142                     // Needed for performance measurement
143                     //
144                     
145                           void startServer();
146                     
147                           void endServer();
148                     
149                           void startProvider();
150                     
151                           void endProvider();
152                     
153 w.white        1.68       TimeValue getStartServerTime() const { return _timeServerStart; }
154 sage           1.30 
155 w.white        1.68       void setStartServerTime(TimeValue timeServerStart)
156 sage           1.30       {
157                                _timeServerStart = timeServerStart;
158                           }
159                     
160 w.white        1.68       TimeValue getStartProviderTime() const { return _timeProviderStart; }
161 sage           1.30 
162 w.white        1.68       void setStartProviderTime(TimeValue timeProviderStart)
163 sage           1.30       {
164                               _timeProviderStart = timeProviderStart;
165                           }
166                     
167 w.white        1.68       TimeValue getEndServerTime() const { return _timeServerEnd; }
168 sage           1.30 
169 w.white        1.68       void setEndServerTime (TimeValue timeServerEnd)
170 sage           1.30       {
171                               _timeServerEnd = timeServerEnd;
172                           }
173                     
174 w.white        1.68       TimeValue getEndProviderTime() const { return _timeProviderEnd; }
175 sage           1.30 
176 w.white        1.68       void setEndProviderTime(TimeValue timeProviderEnd)
177 sage           1.30       {
178                               _timeProviderEnd = timeProviderEnd;
179                           }
180                     
181 w.white        1.68 	  TimeValue getServerTime() { return _serverTime; }
182 sage           1.30 //
183 sage           1.31 #endif
184 sage           1.30 
185 a.dunfey       1.67       static CIMOperationType convertMessageTypetoCIMOpType(Uint32 type);
186 w.white        1.63 
187 joyce.j        1.69 #ifdef PEGASUS_DEBUG
188 mike           1.36       virtual void print(
189                     	  PEGASUS_STD(ostream)& os, 
190                     	  Boolean printHeader = true) const;
191 joyce.j        1.69 #endif
192 mike           1.4  
193 mday           1.22       Message *get_async(void)
194                           {
195                     	 Message *ret = _async;
196                     	 _async = 0;
197                     	 return ret;
198 chip           1.24 	
199 mday           1.22       }
200 chip           1.24 
201 mday           1.22       void put_async(Message * msg)
202                           {
203                     	 _async = msg;
204                           }
205 chip           1.24 
206 mday           1.44       // << Tue Jul  1 11:02:49 2003 mdd >> pep_88 and helper for i18n and l10n
207                           Boolean thread_changed(void)
208                           {
209 mike           1.80 	 if (!Threads::equal(_last_thread_id, Threads::self()))
210 mday           1.44 	 {
211 mike           1.80 	    _last_thread_id = Threads::self();
212 mday           1.44 	    return true;
213                     	 }
214                     
215                     	 return false;
216                           }
217                           
218 brian.campbell 1.55 			// set the message index indicating what piece (or sequence) this is
219                     			// message indexes start at zero
220                     			void setIndex(Uint32 index) { _index = index; }
221                     
222                     			// increment the message index
223                     			void incrementIndex() { _index++; }
224                     
225                     			// set the complete flag indicating if this message piece is the 
226                     			// last or not
227                     			void setComplete(Boolean isComplete) 
228                     				{ _isComplete = isComplete ? true:false; }
229                     
230                     			// get the message index (or sequence number)
231                     			Uint32 getIndex() const { return _index; }
232                     
233                     			// is this the first piece of the message ?
234                     			Boolean isFirst() const { return _index == 0 ? true : false; }
235                     
236                     			// is this message complete? (i.e the last in a one or more sequence)
237                     			Boolean isComplete() const { return _isComplete; }
238 chip           1.24 
239 mday           1.8     private:
240 mike           1.6        Uint32 _type;
241                           Uint32 _mask;
242 kumpf          1.40       HttpMethod _httpMethod;
243 sage           1.30 // Needed for performance measurement
244 w.white        1.68       TimeValue _timeServerStart;
245                           TimeValue _timeServerEnd;
246                           TimeValue _timeProviderStart;
247                           TimeValue _timeProviderEnd;
248                     	  TimeValue _serverTime;	
249 j.alex         1.70       Boolean   _close_connect;  
250                     
251 sage           1.30 //
252 mday           1.44 
253                           // << Tue Jul  1 11:02:35 2003 mdd >> pep_88 and helper for i18n and l10n
254 mike           1.80       ThreadType _last_thread_id;
255 mday           1.32 
256                        public:
257 mday           1.19       Message *_async;
258 mday           1.20       Uint32 dest;
259 w.white        1.56 	  //needed for PEP 128 - transmitting Server Response Time to Client
260                           Uint64 totServerTime;
261                     
262 mday           1.19    private:
263 brian.campbell 1.55       Boolean _isComplete;
264                           Uint32 _index;
265 mday           1.44 
266 mday           1.20       friend class cimom;
267 mday           1.19       friend class MessageQueueService;
268                           friend class AsyncLegacyOperationStart;
269                           friend class AsyncLegacyOperationResult;
270 chip           1.24 
271 mike           1.4  };
272 mike           1.5  
273 mike           1.6  
274 mike           1.5  enum MessageType
275                     {
276                         DUMMY_MESSAGE,
277                     
278                         // CIM Message types:
279                     
280                         CIM_GET_CLASS_REQUEST_MESSAGE,
281                         CIM_GET_INSTANCE_REQUEST_MESSAGE,
282 mike           1.6      CIM_EXPORT_INDICATION_REQUEST_MESSAGE,
283 mike           1.5      CIM_DELETE_CLASS_REQUEST_MESSAGE,
284                         CIM_DELETE_INSTANCE_REQUEST_MESSAGE,
285                         CIM_CREATE_CLASS_REQUEST_MESSAGE,
286                         CIM_CREATE_INSTANCE_REQUEST_MESSAGE,
287                         CIM_MODIFY_CLASS_REQUEST_MESSAGE,
288                         CIM_MODIFY_INSTANCE_REQUEST_MESSAGE,
289 mday           1.32     CIM_ENUMERATE_CLASSES_REQUEST_MESSAGE, //10
290 mike           1.5      CIM_ENUMERATE_CLASS_NAMES_REQUEST_MESSAGE,
291                         CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE,
292                         CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE,
293                         CIM_EXEC_QUERY_REQUEST_MESSAGE,
294                         CIM_ASSOCIATORS_REQUEST_MESSAGE,
295                         CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE,
296                         CIM_REFERENCES_REQUEST_MESSAGE,
297                         CIM_REFERENCE_NAMES_REQUEST_MESSAGE,
298                         CIM_GET_PROPERTY_REQUEST_MESSAGE,
299 mday           1.32     CIM_SET_PROPERTY_REQUEST_MESSAGE, //20
300 mike           1.5      CIM_GET_QUALIFIER_REQUEST_MESSAGE,
301                         CIM_SET_QUALIFIER_REQUEST_MESSAGE,
302                         CIM_DELETE_QUALIFIER_REQUEST_MESSAGE,
303                         CIM_ENUMERATE_QUALIFIERS_REQUEST_MESSAGE,
304                         CIM_INVOKE_METHOD_REQUEST_MESSAGE,
305 kumpf          1.15     CIM_PROCESS_INDICATION_REQUEST_MESSAGE,
306 kumpf          1.73     CIM_HANDLE_INDICATION_REQUEST_MESSAGE,
307 kumpf          1.75     CIM_NOTIFY_PROVIDER_REGISTRATION_REQUEST_MESSAGE,
308 kumpf          1.15     CIM_NOTIFY_PROVIDER_TERMINATION_REQUEST_MESSAGE,
309 kumpf          1.75     CIM_CREATE_SUBSCRIPTION_REQUEST_MESSAGE,  // 30
310 chip           1.25     CIM_MODIFY_SUBSCRIPTION_REQUEST_MESSAGE,
311                         CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE,
312 kumpf          1.29     CIM_DISABLE_MODULE_REQUEST_MESSAGE,
313                         CIM_ENABLE_MODULE_REQUEST_MESSAGE,
314 carolann.graves 1.64     CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE,
315 kumpf           1.35 
316 kumpf           1.43     CIM_GET_CLASS_RESPONSE_MESSAGE,
317 kumpf           1.73     CIM_GET_INSTANCE_RESPONSE_MESSAGE,
318 kumpf           1.75     CIM_EXPORT_INDICATION_RESPONSE_MESSAGE,
319 mike            1.5      CIM_DELETE_CLASS_RESPONSE_MESSAGE,
320 kumpf           1.75     CIM_DELETE_INSTANCE_RESPONSE_MESSAGE,  // 40
321 mike            1.5      CIM_CREATE_CLASS_RESPONSE_MESSAGE,
322                          CIM_CREATE_INSTANCE_RESPONSE_MESSAGE,
323                          CIM_MODIFY_CLASS_RESPONSE_MESSAGE,
324                          CIM_MODIFY_INSTANCE_RESPONSE_MESSAGE,
325 carolann.graves 1.64     CIM_ENUMERATE_CLASSES_RESPONSE_MESSAGE,
326 mike            1.5      CIM_ENUMERATE_CLASS_NAMES_RESPONSE_MESSAGE,
327 kumpf           1.73     CIM_ENUMERATE_INSTANCES_RESPONSE_MESSAGE,
328 kumpf           1.75     CIM_ENUMERATE_INSTANCE_NAMES_RESPONSE_MESSAGE,
329 mike            1.5      CIM_EXEC_QUERY_RESPONSE_MESSAGE,
330 kumpf           1.75     CIM_ASSOCIATORS_RESPONSE_MESSAGE,  // 50
331 mike            1.5      CIM_ASSOCIATOR_NAMES_RESPONSE_MESSAGE,
332                          CIM_REFERENCES_RESPONSE_MESSAGE,
333                          CIM_REFERENCE_NAMES_RESPONSE_MESSAGE,
334                          CIM_GET_PROPERTY_RESPONSE_MESSAGE,
335 carolann.graves 1.64     CIM_SET_PROPERTY_RESPONSE_MESSAGE,
336 mike            1.5      CIM_GET_QUALIFIER_RESPONSE_MESSAGE,
337 kumpf           1.73     CIM_SET_QUALIFIER_RESPONSE_MESSAGE,
338 kumpf           1.75     CIM_DELETE_QUALIFIER_RESPONSE_MESSAGE,
339 mike            1.5      CIM_ENUMERATE_QUALIFIERS_RESPONSE_MESSAGE,
340 kumpf           1.75     CIM_INVOKE_METHOD_RESPONSE_MESSAGE,  // 60
341 kumpf           1.15     CIM_PROCESS_INDICATION_RESPONSE_MESSAGE,
342 carolann.graves 1.64     CIM_NOTIFY_PROVIDER_REGISTRATION_RESPONSE_MESSAGE,
343 kumpf           1.15     CIM_NOTIFY_PROVIDER_TERMINATION_RESPONSE_MESSAGE,
344 kumpf           1.73     CIM_HANDLE_INDICATION_RESPONSE_MESSAGE,
345 chip            1.25     CIM_CREATE_SUBSCRIPTION_RESPONSE_MESSAGE,
346 kumpf           1.75     CIM_MODIFY_SUBSCRIPTION_RESPONSE_MESSAGE,
347 chip            1.25     CIM_DELETE_SUBSCRIPTION_RESPONSE_MESSAGE,
348 kumpf           1.29     CIM_DISABLE_MODULE_RESPONSE_MESSAGE,
349                          CIM_ENABLE_MODULE_RESPONSE_MESSAGE,
350 kumpf           1.75     CIM_STOP_ALL_PROVIDERS_RESPONSE_MESSAGE,  // 70
351 chip            1.24 
352 mike            1.6      // Monitor-related messages:
353                      
354                          SOCKET_MESSAGE,
355                      
356                          // Connection-oriented messages:
357                      
358                          CLOSE_CONNECTION_MESSAGE,
359                      
360                          // HTTP messages:
361                      
362                          HTTP_MESSAGE,
363 kumpf           1.73     HTTP_ERROR_MESSAGE,
364 kumpf           1.28 
365                          // Exception messages to be passed to a CIM client application:
366                      
367                          CLIENT_EXCEPTION_MESSAGE,
368 mike            1.5  
369 kumpf           1.75     ASYNC_REGISTER_CIM_SERVICE,
370 mday            1.33     ASYNC_DEREGISTER_CIM_SERVICE,
371                          ASYNC_UPDATE_CIM_SERVICE,
372                          ASYNC_IOCTL,
373 kumpf           1.75     ASYNC_CIMSERVICE_START,  // 80
374 mday            1.33     ASYNC_CIMSERVICE_STOP,
375                          ASYNC_CIMSERVICE_PAUSE,
376                          ASYNC_CIMSERVICE_RESUME,
377                      
378 kumpf           1.73     ASYNC_ASYNC_OP_START,
379 mday            1.33     ASYNC_ASYNC_OP_RESULT,
380 kumpf           1.75     ASYNC_ASYNC_LEGACY_OP_START,
381 chip            1.34     ASYNC_ASYNC_LEGACY_OP_RESULT,
382                      
383 mday            1.33     ASYNC_FIND_SERVICE_Q,
384                          ASYNC_FIND_SERVICE_Q_RESULT,
385 kumpf           1.75     ASYNC_ENUMERATE_SERVICE,  // 90
386 mday            1.33     ASYNC_ENUMERATE_SERVICE_RESULT,
387 chip            1.34 
388 mday            1.33     ASYNC_REGISTERED_MODULE,
389                          ASYNC_DEREGISTERED_MODULE,
390 kumpf           1.73     ASYNC_FIND_MODULE_IN_SERVICE,
391 mday            1.33     ASYNC_FIND_MODULE_IN_SERVICE_RESPONSE,
392 chip            1.34 
393 kumpf           1.75     ASYNC_ASYNC_MODULE_OP_START,
394 mday            1.33     ASYNC_ASYNC_MODULE_OP_RESULT,
395                      
396 kumpf           1.53     CIM_NOTIFY_PROVIDER_ENABLE_REQUEST_MESSAGE,
397                          CIM_NOTIFY_PROVIDER_ENABLE_RESPONSE_MESSAGE,
398                      
399 kumpf           1.75     CIM_NOTIFY_PROVIDER_FAIL_REQUEST_MESSAGE,  // 100
400 carolann.graves 1.74     CIM_NOTIFY_PROVIDER_FAIL_RESPONSE_MESSAGE,
401                      
402 kumpf           1.53     CIM_INITIALIZE_PROVIDER_REQUEST_MESSAGE,
403 w.white         1.52     CIM_INITIALIZE_PROVIDER_RESPONSE_MESSAGE,
404                      
405 kumpf           1.53     CIM_INITIALIZE_PROVIDER_AGENT_REQUEST_MESSAGE,
406                          CIM_INITIALIZE_PROVIDER_AGENT_RESPONSE_MESSAGE,
407 kumpf           1.47 
408 kumpf           1.54     CIM_NOTIFY_CONFIG_CHANGE_REQUEST_MESSAGE,
409                          CIM_NOTIFY_CONFIG_CHANGE_RESPONSE_MESSAGE,
410                      
411 carolann.graves 1.64     CIM_SUBSCRIPTION_INIT_COMPLETE_REQUEST_MESSAGE,
412                          CIM_SUBSCRIPTION_INIT_COMPLETE_RESPONSE_MESSAGE,
413                      
414 mike            1.5      NUMBER_OF_MESSAGES
415                      };
416                      
417                      PEGASUS_COMMON_LINKAGE const char* MessageTypeToString(Uint32 messageType);
418 mike            1.6  
419                      /** This class implements a stack of queue-ids. Many messages must keep a
420                          stack of queue-ids of queues which they must be returned to. This provides
421                          a light efficient stack for this purpose.
422                      */
423 karl            1.60 class PEGASUS_COMMON_LINKAGE QueueIdStack
424 mike            1.6  {
425                      public:
426                      
427 chip            1.24     QueueIdStack() : _size(0)
428                          {
429 mike            1.6      }
430                      
431 karl            1.59     QueueIdStack(const QueueIdStack& x);
432 mike            1.6  
433 karl            1.59     PEGASUS_EXPLICIT QueueIdStack(Uint32 x);
434 mike            1.6  
435 karl            1.59     PEGASUS_EXPLICIT QueueIdStack(Uint32 x1, Uint32 x2);
436 mike            1.6  
437 chip            1.24     ~QueueIdStack()
438                          {
439 mike            1.6      }
440                      
441 karl            1.59     QueueIdStack& operator=(const QueueIdStack& x);
442 mike            1.6  
443 chip            1.24     Uint32 size() const
444                          {
445                      	return _size;
446 mike            1.6      }
447                      
448 chip            1.24     Boolean isEmpty() const
449                          {
450                      	return _size == 0;
451 mike            1.6      }
452                      
453 chip            1.24     void push(Uint32 x)
454 mike            1.6      {
455 karl            1.59 #ifdef PEGASUS_DEBUG
456 mike            1.6  	if (_size == MAX_SIZE)
457                      	    throw StackOverflow();
458 karl            1.59 #endif
459 mike            1.6  	_items[_size++] = x;
460                          }
461                      
462                          Uint32& top()
463                          {
464 karl            1.59 #ifdef PEGASUS_DEBUG
465 mike            1.6  	if (_size == 0)
466                      	    throw StackUnderflow();
467 karl            1.59 #endif
468 mike            1.6  	return _items[_size-1];
469                          }
470                      
471 chip            1.24     Uint32 top() const
472 mike            1.6      {
473 chip            1.24 	return ((QueueIdStack*)this)->top();
474 mike            1.6      }
475                      
476 chip            1.24     void pop()
477 mike            1.6      {
478 karl            1.59 #ifdef PEGASUS_DEBUG
479 mike            1.6  	if (_size == 0)
480                      	    throw StackUnderflow();
481 karl            1.59 #endif
482 mike            1.6  	_size--;
483                          }
484                      
485                          /** Make a copy of this stack and then pop the top element. */
486 karl            1.59     QueueIdStack copyAndPop() const;
487 mike            1.6  
488                      private:
489                      
490                          // Copy the given stack but then pop the top element:
491 karl            1.59     QueueIdStack(const QueueIdStack& x, int);
492 mike            1.6  
493                          enum { MAX_SIZE = 5 };
494                          Uint32 _items[MAX_SIZE];
495                          Uint32 _size;
496                      };
497 mike            1.4  
498                      PEGASUS_NAMESPACE_END
499                      
500                      #endif /* Pegasus_Message_h */

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2