diff options
Diffstat (limited to 'TAO/tao/NVList.h')
-rw-r--r-- | TAO/tao/NVList.h | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/TAO/tao/NVList.h b/TAO/tao/NVList.h new file mode 100644 index 00000000000..5dff27b1220 --- /dev/null +++ b/TAO/tao/NVList.h @@ -0,0 +1,160 @@ +// This may look like C, but it's really -*- C++ -*- +// $Id$ + +// ============================================================================ +// +// = LIBRARY +// TAO +// +// = FILENAME +// NVList.h +// +// = AUTHOR +// Copyright 1994-1995 by Sun Microsystems Inc. +// and +// Aniruddha Gokhale (additions, missing operations) +// +// ============================================================================ + +#if !defined (TAO_NVLIST_H) +# define TAO_NVLIST_H + +class TAO_Export CORBA_NamedValue +{ + // = TITLE + // NamedValue ... these occur only in "NVList" (named value list) data + // structures. The binary form of the data structure is frozen and + // visible to programs using it (e.g. from C). The C++ class supports + // some programming discipline, e.g. to avoid memory leaks. + // + // They just represent parameters to calls. The name is optional, and + // the value is packaged as an Any. The flags indicate parameter + // mode, and some ownership rules for "top level" memory. +public: + const char *name (void) const; + // optional name + + CORBA::Any_ptr value (void) const; + // return the value + + CORBA::Flags flags (void) const; + // return the parameter mode flag + + ~CORBA_NamedValue (void); + // destructor - manages the name and value + + // = Methods required for COM IUnknown support. + + CORBA::ULong AddRef (void); + CORBA::ULong Release (void); + +private: + u_int refcount_; + // refcount used in release + + CORBA::Any any_; + // holds the value + + CORBA::Flags flags_; + // parameter mode flags + + char *name_; + // optional IDL name of the parameter + + CORBA_NamedValue (void); + // private constructor. Cannot be directly instantiated other than by its + // friends. + + friend class CORBA_ORB; + friend class CORBA_NVList; + friend class CORBA_Request; +}; + +class TAO_Export CORBA_NVList +{ + // = TITLE + // NVList ... this is used in the (client side) DII (Dynamic + // Invocation Interface) to hold parameters, except for the return + // parameter. It's used in the same role in the (server side) DSI + // (Dynamic Skeleton Interface). + // + // = DESCRIPTION + // Each user (client, server) provides the typecode and memory for + // each parameter using an NVList, then talks to the ORB using a + // Request or ServerRequest pseudo-object. The ORB copies data + // to/from the IPC messages (e.g. IIOP::Request, IIOP::Response) + // as appropriate. +public: + ~CORBA_NVList (void); + // destructor + + CORBA::ULong count (void) const; + // return the current number of elements in the list + + CORBA::NamedValue_ptr add (CORBA::Flags, + CORBA::Environment &); + // add an element and just initialize the flags + + CORBA::NamedValue_ptr add_item (const char *, + CORBA::Flags, + CORBA::Environment &); + // add an element and initialize its name and flags + + CORBA::NamedValue_ptr add_value (const char *, + const CORBA::Any &, + CORBA::Flags, + CORBA::Environment &); + // initializes a value, name, and flags + + CORBA::NamedValue_ptr add_item_consume (char *, + CORBA::Flags, + CORBA::Environment &); + // just like add_item. In addition, memory management of char * name is taken + // over by the NVList + + CORBA::NamedValue_ptr add_value_consume (char *, + CORBA::Any_ptr, + CORBA::Flags, + CORBA::Environment &); + // just like add_value. In addition, the NVList controls the memory + // management of the char *name and Any *value parameter + + CORBA::NamedValue_ptr item (CORBA::ULong n, CORBA::Environment &env); + // retrieve the item at the nth location. Raises Bounds + + + // CORBA::Status + void remove (CORBA::ULong n, CORBA::Environment &env); + // remove element at index n. Raises Bounds + + // = Methods required for COM IUnknown support + + CORBA::ULong AddRef (void); + CORBA::ULong Release (void); + +private: + CORBA_NVList (void); + // constructor - cannot be instantiated directly other than through the + // ORB::create_list method + + CORBA::Boolean add_element (CORBA::Flags, CORBA::Environment &); + // helper to increase the list size. This is used by all the add_ methods of + // the NVList class + + CORBA::NamedValue *values_; + // list of parameters stored as NamedValues + + CORBA::ULong max_; + // maximum length of list + + CORBA::ULong len_; + // current length of list + + CORBA::ULong refcount_; + // maintains how many references exist to this object + + friend class CORBA_ORB; + friend class CORBA_Request; +}; + +#endif /* TAO_NVLIST_H */ |