summaryrefslogtreecommitdiff
path: root/TAO/tao/NVList.h
diff options
context:
space:
mode:
authorschmidt <douglascraigschmidt@users.noreply.github.com>1998-03-22 07:43:23 +0000
committerschmidt <douglascraigschmidt@users.noreply.github.com>1998-03-22 07:43:23 +0000
commitf6c676bf1e8dcc16d14d2b8fbc778262bd459ddb (patch)
treee1f8450ff127dc9c54106119fc8614be38a34221 /TAO/tao/NVList.h
parent50398722f38cf591821c4a62818896e19a1e8f92 (diff)
downloadATCD-f6c676bf1e8dcc16d14d2b8fbc778262bd459ddb.tar.gz
*** empty log message ***
Diffstat (limited to 'TAO/tao/NVList.h')
-rw-r--r--TAO/tao/NVList.h160
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 */