⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 psdl_string.cpp

📁 这是广泛使用的通信开源项目,对于大容量,高并发的通讯要求完全能够胜任,他广泛可用于网络游戏医学图像网关的高qos要求.更详细的内容可阅读相应的材料
💻 CPP
字号:
// PSDL_String.cpp,v 1.4 2003/08/02 18:10:48 bala Exp

#include "PSDL_String.h"

#include "ace/Malloc_Base.h"
#include "ace/SString.h"

ACE_RCSID (PSS, PSDL_String, "$Id")

// Constructor
TAO_PSDL_String::TAO_PSDL_String ()
  : allocator_ (0),
    buffer_ (0),
    length_ (0)
{
}

// Constructor
TAO_PSDL_String::TAO_PSDL_String (ACE_Allocator * persistent_allocator)
  : allocator_ (persistent_allocator),
    buffer_ (0),
    length_ (0)
{
}

// Destructor.
TAO_PSDL_String::~TAO_PSDL_String (void)
{
  if (this->buffer_ != 0)
    this->allocator_->free ((void *) this->buffer_);
}

// Copy constructor.
TAO_PSDL_String::TAO_PSDL_String (const TAO_PSDL_String & rhs)
{
  *this = rhs;
}

// Assignment operator.
void
TAO_PSDL_String::operator= (const TAO_PSDL_String & rhs)
{
  if (this == &rhs)  // Prevent self assignment
    return;

  // Free the existing buffer before assigning a new
  // allocator and buffer.
  if (this->buffer_ != 0)
    this->allocator_->free ((void *) this->buffer_);

  this->allocator_ = rhs.allocator_;
  void * buf = this->allocator_->malloc (rhs.length_);
  this->buffer_ = (const char *) buf;
  if (this->buffer_)
    {
      // Deep copy the buffer.
      ACE_OS::memcpy ( (void *) this->buffer_,
                       rhs.buffer_,
                       rhs.length_);

      this->length_ = rhs.length_;
    }
  else
    this->length_ = 0;
}

void
TAO_PSDL_String::operator= (const ACE_CString & rhs)
{
  // Free the existing buffer before assigning octet
  // sequence.
  if (this->buffer_ != 0)
    this->allocator_->free ((void *) this->buffer_);

  const CORBA::ULong len = rhs.length ();

  void * buf = this->allocator_->malloc (len);

  this->buffer_ = (const char *) buf;

  if (this->buffer_)
    {
      const char * dest = this->buffer_;
      const char * src = rhs.rep ();

      // Deep copy the buffer.
      ACE_OS::memcpy ((void *)dest,
                      src,
                      len);

      this->length_ = len;
    }
  else
    this->length_ = 0;
}

int
TAO_PSDL_String::operator== (const TAO_PSDL_String &rhs) const
{
  return (ACE_OS::strcmp (buffer_, rhs.buffer_) == 0);

}

int
TAO_PSDL_String::operator!= (const TAO_PSDL_String &rhs) const
{
  return (ACE_OS::strcmp (buffer_, rhs.buffer_) != 0);

}

u_long
TAO_PSDL_String::hash (void) const
{
  return ACE::hash_pjw (this->buffer_);
}

// Conversion operators (cast)
// (caller owns storage of return values)
TAO_PSDL_String::operator ACE_CString *() const
{
  ACE_CString *str = 0;

  char * dest = str->rep ();
  const char * src = this->buffer_;

  ACE_OS::memcpy (dest, src, this->length_);

  return str;
}

TAO_PSDL_String::operator ACE_CString *()
{
  ACE_CString *str = 0;

  char * dest = str->rep ();
  const char * src = this->buffer_;
  ACE_OS::memcpy (dest, src, this->length_);

  return str;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -