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

📄 anyp.h

📁 编译工具
💻 H
字号:
// anyP.h                     Created on: 04/08/98//                            Author    : James Weatherall (jnw)//////    Copyright (C) 1998-1999 AT&T Laboratories Cambridge////    This file is part of the omniORB library////    The omniORB library is free software; you can redistribute it and/or//    modify it under the terms of the GNU Library General Public//    License as published by the Free Software Foundation; either//    version 2 of the License, or (at your option) any later version.////    This library is distributed in the hope that it will be useful,//    but WITHOUT ANY WARRANTY; without even the implied warranty of//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU//    Library General Public License for more details.////    You should have received a copy of the GNU Library General Public//    License along with this library; if not, write to the Free//    Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  //    02111-1307, USA////// Description://    Private class AnyP for the implementation of the Any interface.//#ifndef __ANYP_H__#define __ANYP_H__#include <tcParser.h>OMNI_NAMESPACE_BEGIN(omni)class AnyP {public:  // -=- CREATION/DESTRUCTION  AnyP(const CORBA::TypeCode_ptr tc);  // Constructor.  Duplicates and saves <tc>  AnyP(const CORBA::TypeCode_ptr tc, void * value, CORBA::Boolean release);  // Constructor.  Duplicates and saves <tc>.  Makes internal  // mbuf read-only, linked to the supplied data <value>.  // <value> is "owned" by anyP if <release> is set.  // NEVER CALL THIS FUNCTION WITH A NULL value POINTER!  AnyP(const AnyP *existing);  // Constructor.  Copies typecode from existing anyP and  // fills internal buffer with source anyP's contents.  ~AnyP();  // -=- RECREATION  void setTC_and_reset(const CORBA::TypeCode_ptr tc);  // Change the TypeCode and flush the buffer  // -=- tcDescriptor MANIPULATION  inline CORBA::Boolean getData(const CORBA::TypeCode_ptr tc, tcDescriptor &data) {    if (!tc->equivalent(pd_tc))      return 0;    tcParser::copyMemStreamToTcDescriptor_rdonly(pd_tc, pd_mbuf, data);    return 1;  }  // Check the TypeCode and fetch the data into a tcDescriptor  inline CORBA::Boolean getObjRef(tcDescriptor& data) {    if( pd_tc->kind() != CORBA::tk_objref )  return 0;    tcParser::copyMemStreamToTcDescriptor_rdonly(pd_tc, pd_mbuf, data);    return 1;  }  // Routine to extract an object reference from the Any. Checks that we  // contain an object ref, but not that the interface repo id is correct.  // This is done further down the line ...  inline void setData(const CORBA::TypeCode_ptr tc, const tcDescriptor &data) {    setTC_and_reset(tc);    tcParser::copyTcDescriptorToMemStream_flush(pd_tc, data, pd_mbuf);  }  // Routine to change the TypeCode and fill the mbuf from the  // given tcDescriptor.  // -=- TYPECODE OPERATIONS  inline const CORBA::TypeCode_ptr getTC() {    return pd_tc;  }  // Return the actual typecode in use - NOT A DUPLICATE  inline void replaceTC(const CORBA::TypeCode_ptr tc) {    if (tc->equivalent(pd_tc))      pd_tc = CORBA::TypeCode::_duplicate(tc);    else      throw CORBA::TypeCode::BadKind();  }  // If the tc is equivalent to pd_tc, use it instead of pd_tc  // -=- BUFFER OPERATIONS  inline const void *getBuffer() {    return pd_mbuf.bufPtr();  }  // Return the start of the data buffer.  inline cdrMemoryStream& getWRableMemoryStream() {    pd_mbuf.rewindPtrs(); return pd_mbuf;  }  // Returns a reference to the internal MemoryStream.  // NOTE: The stream is emptied before being returned.  inline const cdrMemoryStream& theMemoryStream() {    return pd_mbuf;  }  // Returns a reference to the internal MemoryStream. It may only be  // read from, not written to.  // -=- CACHED DATA HANDLING  inline void *getCachedData() { return pd_cached_data_ptr; }  // Retrieve the cached data pointer.  inline void setCachedData(void *data, void (*destructor)(void *)) {    pd_cached_data_ptr = data;    pd_cached_data_destructor = destructor;  }  // Set the cached data pointer and provide a destructor function.  // -=- MARSHALLING TO/FROM STREAMS  inline void copyTo(cdrStream &s) {    tcParser::copyMemStreamToStream_rdonly(pd_tc, pd_mbuf, s);  }  // Copy the internal buffer out to a stream (re-entrant)  inline void copyFrom(cdrStream &s) {    tcParser::copyStreamToMemStream_flush(pd_tc, s, pd_mbuf);  }  // Fill the internal buffer from a stream (replaces contents)private:  // PRIVATE DATA  cdrMemoryStream pd_mbuf;  CORBA::TypeCode_var pd_tc;  // If the AnyP was created using a void* pointer and TypeCode.  void * pd_dataptr;  CORBA::Boolean pd_releaseptr;  // Cached data pointer and a destructor for it. This is required  // because when unmarshalling complex structures from Anys, the  // Any has to handle the storage!  void* pd_cached_data_ptr;  void (*pd_cached_data_destructor)(void*);};OMNI_NAMESPACE_END(omni)#endif  // __ANYP_H__

⌨️ 快捷键说明

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