diff options
Diffstat (limited to 'TAO/tao/CORBA.i')
-rw-r--r-- | TAO/tao/CORBA.i | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/TAO/tao/CORBA.i b/TAO/tao/CORBA.i new file mode 100644 index 00000000000..9850e0e9ed5 --- /dev/null +++ b/TAO/tao/CORBA.i @@ -0,0 +1,185 @@ +// This may look like C, but it's really -*- C++ -*- + +// String utility support. Since these are static methods we need to +// explicitly export them from the DLL. + +ACE_INLINE TAO_Export CORBA::String +CORBA::string_alloc (CORBA::ULong len) +{ + // Allocate 1 + strlen to accomodate the null terminating character. + return new CORBA::Char[size_t (len + 1)]; +} + +ACE_INLINE TAO_Export CORBA::String +CORBA::string_dup (const CORBA::Char *str) +{ + return CORBA::string_copy (str); +} + +ACE_INLINE TAO_Export void +CORBA::string_free (CORBA::Char *str) +{ + delete [] str; +} + +// ---------------------------------------------------------------------- +// String_var type +// ---------------------------------------------------------------------- + +ACE_INLINE +CORBA::String_var::String_var (void) +{ + this->ptr_ = 0; +} + +ACE_INLINE +CORBA::String_var::~String_var (void) +{ + if (this->ptr_ != 0) + { + CORBA::string_free (this->ptr_); + this->ptr_ = 0; + } +} + +ACE_INLINE +CORBA::String_var::String_var (char *p) + : ptr_ (p) +{ + // NOTE: According to the CORBA spec this string must *not* be + // copied, but it is non-compliant to use it/release it in the + // calling code. argument is consumed. p should never be NULL +} + +ACE_INLINE +CORBA::String_var::String_var (const char *p) + : ptr_ (CORBA::string_dup ((char *) p)) +{ +} + +ACE_INLINE +CORBA::String_var::String_var (const CORBA::String_var& r) +{ + this->ptr_ = CORBA::string_dup (r.ptr_); +} + +ACE_INLINE CORBA::Char & +CORBA::String_var::operator[] (CORBA::ULong index) +{ + // We need to verify bounds else raise some exception. + return this->ptr_[index]; +} + +ACE_INLINE CORBA::Char +CORBA::String_var::operator[] (CORBA::ULong index) const +{ + // We need to verify bounds else raise some exception. + return this->ptr_[index]; +} + +ACE_INLINE +CORBA::String_var::operator char *() +{ + return this->ptr_; +} + +ACE_INLINE +CORBA::String_var::operator const char *() const +{ + return this->ptr_; +} + +ACE_INLINE const char * +CORBA::String_var::in (void) const +{ + return this->ptr_; +} + +ACE_INLINE char *& +CORBA::String_var::inout (void) +{ + return this->ptr_; +} + +ACE_INLINE char *& +CORBA::String_var::out (void) +{ + CORBA::string_free (this->ptr_); + this->ptr_ = 0; + return this->ptr_; +} + +ACE_INLINE char * +CORBA::String_var::_retn (void) +{ + char *temp = this->ptr_; + this->ptr_ = 0; + return temp; +} + +// ---------------------------------------------------- +// String_out type +// ---------------------------------------------------- + +ACE_INLINE +CORBA::String_out::String_out (char *&s) + : ptr_ (s) +{ + this->ptr_ = 0; +} + +ACE_INLINE +CORBA::String_out::String_out (CORBA::String_var &s) + : ptr_ (s.out ()) +{ +} + +ACE_INLINE +CORBA::String_out::String_out (CORBA::String_out &s) + : ptr_ (s.ptr_) +{ +} + +ACE_INLINE CORBA::String_out & +CORBA::String_out::operator= (CORBA::String_out &s) +{ + this->ptr_ = s.ptr_; + return *this; +} + +ACE_INLINE CORBA::String_out & +CORBA::String_out::operator= (char *s) +{ + this->ptr_ = s; + return *this; +} + +ACE_INLINE CORBA::String_out & +CORBA::String_out::operator= (const char *s) +{ + this->ptr_ = CORBA::string_dup (s); + return *this; +} + +ACE_INLINE +CORBA::String_out::operator char *&() +{ + return this->ptr_; +} + +ACE_INLINE char *& +CORBA::String_out::ptr (void) +{ + return this->ptr_; +} + +// ---------------------------------------------------------------------- +// Wide strings +// ---------------------------------------------------------------------- + +ACE_INLINE TAO_Export CORBA::WString +CORBA::wstring_dup (const WChar *const str) +{ + return CORBA::wstring_copy (str); +} + |