summaryrefslogtreecommitdiff
path: root/TAO/tao/target_specification.h
diff options
context:
space:
mode:
authorbala <bala@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2000-03-20 01:58:53 +0000
committerbala <bala@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2000-03-20 01:58:53 +0000
commit4587562e113f105d50b6505ff89f163e3bca9efa (patch)
tree8e76bc5ecbe02375c522a6f8933bbc21edec6e55 /TAO/tao/target_specification.h
parent7941312cbf7d903dd85f2a634e300bffa69ae4d2 (diff)
downloadATCD-4587562e113f105d50b6505ff89f163e3bca9efa.tar.gz
ChangeLogTag: Sun Mar 19 19:22:34 2000 Balachandran Natarajan <bala@cs.wustl.edu>
Diffstat (limited to 'TAO/tao/target_specification.h')
-rw-r--r--TAO/tao/target_specification.h132
1 files changed, 132 insertions, 0 deletions
diff --git a/TAO/tao/target_specification.h b/TAO/tao/target_specification.h
new file mode 100644
index 00000000000..651565488a5
--- /dev/null
+++ b/TAO/tao/target_specification.h
@@ -0,0 +1,132 @@
+//-*- C++ -*-
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// TAO
+//
+// = FILENAME
+// target_identifier.h
+//
+// = DESCRIPTION
+// A class that encapsulates the target identification details.
+//
+//
+// = AUTHOR
+// Balachandran Natarajan <bala@cs.wustl.edu>
+// ============================================================================
+
+#ifndef TAO_TARGET_SPECIFICATION_H
+#include "ace/pre.h"
+#define TAO_TARGET_SPECIFICATION_H
+
+#include "tao/Object_KeyC.h"
+#include "tao/IOPC.h"
+
+
+class TAO_Target_Specification
+{
+ // = TITLE
+ // A class to encapsulate all the ways of specifying targets.
+ //
+ // = DESCRIPTION
+ // @@ Bala: do we have examples of how other protocols map object
+ // keys?
+ // @@ Carlos: The way HTTP-NG does is not quite intuitive. But
+ // they too have a sequnce of Octet which more or less fits this
+ // model. You are also allowed to specify is a Cache Index (14
+ // bits). I think that can also be worked out and shouldn't be
+ // a big deal.
+ // @@ Bala:What if they pass something around that does not fit
+ // this model?
+ // @@ Carlos:As long as we dont know it is ok. But then if we get
+ // to some point where we have something floating around,
+ // obviously we would have well defined data structure in
+ // TAO. BTW, in IMHO it is not possible for me to think the
+ // myriad data structures that a designer can come up with. So,
+ // I can look ahead possibily a couple of days but not a life
+ // time :-) But you have a good question though. Please sont
+ // remove these discussions. It could be useful for someone
+ // someday.
+ // The motivation behind this is GIOP 1.2 althought I foresee
+ // other messaging protocols doing something similar.
+ // The Invocation classes (client side) were
+ // passing the object key that they had extracted from the
+ // profiles with every invocation. This extraction would be done
+ // based on the policies that are specified for the client side
+ // ORB. Further the client side ORB need not just send the object
+ // key. They can send send the IOP::TaggedProfile or IOP::IOR
+ // profile. So I am putting these possibilites in this class and
+ // pass it to the messaging layer. It would extract what is
+ // required.
+public:
+
+ TAO_Target_Specification (void);
+ // Ctor
+ enum TAO_Target_Address
+ {
+ // Note that this could be extended for other protocols
+ Key_Addr = 0,
+ Profile_Addr,
+ Reference_Addr
+ };
+
+ // Note: Please do not pass in a identifiers that is allocated on
+ // stack. These methods does not make a copy but holds the pointer
+ // passed in.
+ void target_specifier (const TAO_ObjectKey &key);
+ // Set the target specification by giving the object key.
+
+
+ void target_specifier (IOP::TaggedProfile *profile);
+ // Set the target specification by passing in an IOP::TaggedProfile.
+
+ void target_specifier (IOP::IOR *ior,
+ CORBA::ULong prof_index);
+ // Specify the target by passing in the IOP::IOR with a profile
+ // index. Please see the header file IOPC.h on why a profile index
+ // is required.
+
+
+ const TAO_ObjectKey* object_key (void);
+ // Returns the object key after a check of the stored specifier. If
+ // the stored specifier is not of the right type then this would
+ // return a NULL
+
+ const IOP::TaggedProfile *profile (void);
+ // Returns the IOP::TaggedProfile after a check of the stored specifier. If
+ // the stored specifier is not of the right type then this would
+ // return a NULL
+
+ CORBA::ULong iop_ior (IOP::IOR *&ior);
+ // Returns a pointer to IOP::IOR through the parameters and the
+ // index of the selected profile as a return parameter after a check
+ // of the stored specifier. If the stored specifier is not of the
+ // right type then this would return a NULL.
+
+ TAO_Target_Address specifier (void);
+ // Access the TArget_Address specifier
+
+private:
+ union
+ {
+ TAO_ObjectKey *object_key_;
+ IOP::TaggedProfile *profile_;
+ IOP::IOR *ior_;
+ } u_;
+ // The union of all the possibilities
+
+ TAO_Target_Address specifier_;
+ // The enum identifier
+
+ CORBA::ULong profile_index_;
+ // The profile index
+};
+
+#if defined (__ACE_INLINE__)
+#include "target_specification.i"
+#endif /* defined INLINE */
+
+#include "ace/post.h"
+#endif /*TAO_TARGET_SPECIFICATION_H*/