diff options
author | bala <balanatarajan@users.noreply.github.com> | 2000-03-20 01:58:53 +0000 |
---|---|---|
committer | bala <balanatarajan@users.noreply.github.com> | 2000-03-20 01:58:53 +0000 |
commit | 29cba872c098d9774e5ea46957cb17af75e98dfb (patch) | |
tree | 8e76bc5ecbe02375c522a6f8933bbc21edec6e55 /TAO/tao/target_specification.h | |
parent | 9d4b05a6b8ee3342f4ef226d8250e7d9c00d3da2 (diff) | |
download | ATCD-29cba872c098d9774e5ea46957cb17af75e98dfb.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.h | 132 |
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*/ |