本文整理汇总了C++中ACE_Message_Block::data_block方法的典型用法代码示例。如果您正苦于以下问题:C++ ACE_Message_Block::data_block方法的具体用法?C++ ACE_Message_Block::data_block怎么用?C++ ACE_Message_Block::data_block使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ACE_Message_Block
的用法示例。
在下文中一共展示了ACE_Message_Block::data_block方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: replicate_request
void Replication_Service::replicate_request(const FtRtecEventChannelAdmin::Operation& update,
RollbackOperation rollback)
{
TAO_OutputCDR cdr;
cdr << update;
ACE_Message_Block mb;
ACE_CDR::consolidate(&mb, cdr.begin());
#if (TAO_NO_COPY_OCTET_SEQUENCES == 1)
FTRT::State state(mb.length(), &mb);
#else
// If the form of the constructor is not available, we will need
// to do the copy manually. First, set the octet sequence length.
FTRT::State state;
CORBA::ULong length = mb.length ();
state.length (length);
// Now copy over each byte.
char* base = mb.data_block ()->base ();
for(CORBA::ULong i = 0; i < length; i++)
{
state[i] = base[i];
}
#endif /* TAO_NO_COPY_OCTET_SEQUENCES == 1 */
replication_strategy->replicate_request(
state,
rollback,
update.object_id);
}
示例2: dispatch
void PendingSessionRpcNetwork::dispatch(ACE_Message_Block& mblock)
{
assert(mblock.data_block() != 0);
if (! handleMessageNow(mblock)) {
unmarshalingErrorOccurred();
}
}
示例3: while
int
ACE_Message_Block::release_i (ACE_Lock *lock)
{
ACE_TRACE ("ACE_Message_Block::release_i");
// Free up all the continuation messages.
if (this->cont_)
{
ACE_Message_Block *mb = this->cont_;
ACE_Message_Block *tmp = 0;
do
{
tmp = mb;
mb = mb->cont_;
tmp->cont_ = 0;
ACE_Data_Block *db = tmp->data_block ();
if (tmp->release_i (lock) != 0)
{
ACE_Allocator *allocator = db->data_block_allocator ();
ACE_DES_FREE (db,
allocator->free,
ACE_Data_Block);
}
}
while (mb);
this->cont_ = 0;
}
int result = 0;
if (ACE_BIT_DISABLED (this->flags_,
ACE_Message_Block::DONT_DELETE) &&
this->data_block ())
{
if (this->data_block ()->release_no_delete (lock) == 0)
result = 1;
this->data_block_ = 0;
}
// We will now commit suicide: this object *must* have come from the
// allocator given.
if (this->message_block_allocator_ == 0)
delete this;
else
{
ACE_Allocator *allocator = this->message_block_allocator_;
ACE_DES_FREE (this,
allocator->free,
ACE_Message_Block);
}
return result;
}
示例4: svc
// The method that executes in a separate thread
int Forwarder::svc(void)
{
// Start debug logfile for this thread.
// We only do this for debug level > 2 because you will
// get a great many of these files, particularly in the Proxy.
#if 0
if(Options::Instance()->DebugLevel() > 2)
{
Logfile::Open("Fwd");
char * s = CorbaUtil::Instance()->ObjectToString(client_.in());
ACE_DEBUG(( LM_NOTICE, "%C Forwarder::svc thread started at %C\n"
"Sending to:\n%C\n\n",
type(),
Timestamp::TimeDate(buf), s ));
CORBA::string_free(s);
}
#endif
ACE_Message_Block *message;
//MessageBlock *message_block;
DataBlock *data_block;
Package *data;
bool success = false;
int n;
while ((n = this->getq(message)) != -1) {
//ACE_DEBUG((LM_DEBUG, "We have pulled a message from the queue. "
// "There are %d messages remaining in the queue.\n", n));
//message_block = ACE_dynamic_cast(MessageBlock *, message);
data_block = dynamic_cast<DataBlock *>(message->data_block());
data = data_block->data();
success = forward(data);
//ACE_DEBUG((LM_DEBUG, "Releasing message block.\n"));
message->release();
if (!success) {
selfDestruct();
this->flush();
}
}
std::string date_time = DateTime::DateTimeNoSeparators();
ACE_DEBUG((LM_DEBUG, "Exited message loop at %C\n",
date_time.c_str() ));
return 0;
}
示例5: returns
// Listing 04 code/ch18
Command *CommandStream::execute (Command *command)
{
ACE_Message_Block *mb = 0;
ACE_NEW_RETURN (mb, ACE_Message_Block (command), 0);
if (this->put (mb) == -1)
ACE_ERROR_RETURN ((LM_ERROR,
ACE_TEXT ("Fail on put command %d: %p\n"),
command->command_,
ACE_TEXT ("")),
0);
this->get (mb);
command = (Command *)mb->data_block ();
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("Command (%d) returns (%d)\n"),
command->command_,
command->numeric_result_));
return command;
}
示例6: mb
void
Cubit_Client::cube_octet_sequence (int,
int l)
{
try
{
this->call_count_++;
ACE_Message_Block mb (l);
mb.wr_ptr (l);
#if (TAO_NO_COPY_OCTET_SEQUENCES == 1)
Cubit::octet_seq input (l, &mb);
#else
// If the form of the constructor is not available, we will need
// to do the copy manually. First, set the octet sequence length.
Cubit::octet_seq input;
CORBA::ULong length = mb.length ();
input.length (length);
// Now copy over each byte.
char* base = mb.data_block ()->base ();
for(CORBA::ULong i = 0; i < length; i++)
{
input[i] = base[i];
}
#endif /* TAO_NO_COPY_OCTET_SEQUENCES == 1 */
// Just set the first item, otherwise it is hard to compare the
// results for longer sequences, i.e. more than just marshalling
// gets in the way.
input[0] = 4;
#if defined (ACE_INITIALIZE_MEMORY_BEFORE_USE)
for (int i = 1 ; i < l; i++)
input[i]=10;
#endif /* ACE_INITIALIZE_MEMORY_BEFORE_USE */
Cubit::octet_seq_var output;
Cubit::octet_seq_out vout (output);
// Cube the sequence
{
ACE_FUNCTION_TIMEPROBE (CUBIT_CLIENT_CUBE_OCTET_SEQUENCE_START);
this->cubit_->cube_octet_sequence (input,
vout);
}
if (output->length () != input.length ())
{
ACE_ERROR ((LM_ERROR,
"** cube octet, wrong length\n"));
this->error_count_++;
return;
}
u_int rl = output->length ();
if (input.length () < rl)
{
rl = input.length ();
}
CORBA::Octet x = input[0];
if (x * x *x != output[0])
{
ACE_ERROR ((LM_ERROR,
"** cube_octet ERROR\n"));
this->error_count_++;
}
}
catch (const CORBA::Exception& ex)
{
ex._tao_print_exception ("from cube_octet_sequence");
this->error_count_++;
}
}
示例7: defined
ACE_Message_Block::ACE_Message_Block (const ACE_Message_Block &mb,
size_t align)
:flags_ (0),
data_block_ (0)
{
ACE_TRACE ("ACE_Message_Block::ACE_Message_Block");
if (ACE_BIT_DISABLED (mb.flags_,
ACE_Message_Block::DONT_DELETE))
{
if (this->init_i (0, // size
MB_NORMAL, // type
0, // cont
0, // data
0, // allocator
0, // locking strategy
0, // flags
0, // priority
ACE_Time_Value::zero, // execution time
ACE_Time_Value::max_time, // absolute time of deadline
mb.data_block ()->duplicate (), // data block
mb.data_block ()->data_block_allocator (),
mb.message_block_allocator_) == -1)
ACE_ERROR ((LM_ERROR,
ACE_TEXT ("ACE_Message_Block")));
#if !defined (ACE_LACKS_CDR_ALIGNMENT)
// Align ourselves
char *start = ACE_ptr_align_binary (this->base (),
align);
#else
char *start = this->base ();
#endif /* ACE_LACKS_CDR_ALIGNMENT */
// Set our rd & wr pointers
this->rd_ptr (start);
this->wr_ptr (start);
}
else
{
if (this->init_i (0, // size
MB_NORMAL, // type
0, // cont
0, // data
0, // allocator
0, // locking strategy
0, // flags
0, // priority
ACE_Time_Value::zero, // execution time
ACE_Time_Value::max_time, // absolute time of deadline
mb.data_block ()->clone_nocopy (),// data block
mb.data_block ()->data_block_allocator (),
mb.message_block_allocator_) == -1)
ACE_ERROR ((LM_ERROR,
ACE_TEXT ("ACE_Message_Block")));
#if !defined (ACE_LACKS_CDR_ALIGNMENT)
// Align ourselves
char *start = ACE_ptr_align_binary (this->base (),
align);
#else
char *start = this->base ();
#endif /* ACE_LACKS_CDR_ALIGNMENT */
// Set our rd & wr pointers
this->rd_ptr (start);
this->wr_ptr (start);
#if !defined (ACE_LACKS_CDR_ALIGNMENT)
// Get the alignment offset of the incoming ACE_Message_Block
start = ACE_ptr_align_binary (mb.base (),
align);
#else
start = mb.base ();
#endif /* ACE_LACKS_CDR_ALIGNMENT */
// Actual offset for the incoming message block assuming that it
// is also aligned to the same "align" byte
size_t const wr_offset = mb.wr_ptr_ - (start - mb.base ());
// Copy wr_offset amount of data in to <this->data_block>
(void) ACE_OS::memcpy (this->wr_ptr (),
start,
wr_offset);
// Dont move the write pointer, just leave it to the application
// to do what it wants
}
#if defined (ACE_LACKS_CDR_ALIGNMENT)
ACE_UNUSED_ARG (align);
#endif /* ACE_LACKS_CDR_ALIGNMENT */
}
示例8: svc
// Listing 06 code/ch18
// Listing 061 code/ch18
int CommandTask::svc (void)
{
ACE_Message_Block *message;
for (;;)
{
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("CommandTask::svc() - ")
ACE_TEXT ("%s waiting for work\n"),
this->module ()->name ()));
if (this->getq (message) == -1)
ACE_ERROR_RETURN ((LM_ERROR,
ACE_TEXT ("%p\n"),
ACE_TEXT ("getq")),
-1);
if (message->msg_type () == ACE_Message_Block::MB_HANGUP)
{
if (this->putq (message->duplicate ()) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
ACE_TEXT ("%p\n"),
ACE_TEXT ("Task::svc() putq")),
-1);
}
message->release ();
break;
}
// Listing 061
// Listing 062 code/ch18
Command *command = (Command *)message->data_block ();
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("CommandTask::svc() - ")
ACE_TEXT ("%s got work request %d\n"),
ACE_TEXT (this->module ()->name ()),
command->command_));
if (command->command_ != this->command_)
{
this->put_next (message->duplicate ());
}
// Listing 062
// Listing 063 code/ch18
else
{
int result = this->process (command);
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("CommandTask::svc() - ")
ACE_TEXT ("%s work request %d result is %d\n"),
ACE_TEXT (this->module ()->name ()),
command->command_,
result));
if (result == Command::RESULT_FAILURE)
{
command->numeric_result_ = -1;
}
// Listing 063
// Listing 064 code/ch18
else if (result == Command::RESULT_PASS)
{
this->put_next (message->duplicate ());
}
// Listing 064
// Listing 065 code/ch18
else // result == Command::RESULT_SUCCESS
{
if (this->is_writer ())
{
this->sibling ()->putq
(message->duplicate ());
}
// Listing 065
// Listing 066 code/ch18
else // this->is_reader ()
{
this->put_next (message->duplicate ());
}
// Listing 066
} // result == ...
} // command->command_ ? = this->command_
// Listing 067 code/ch18
message->release ();
} // for (;;)
return 0;
}
示例9: tv
int
Test_Supplier::svc ()
{
try
{
// Initialize a time value to pace the test
ACE_Time_Value tv (0, this->burst_pause_);
// Pre-allocate a message to send
ACE_Message_Block mb (this->event_size_);
mb.wr_ptr (this->event_size_);
RtecEventComm::EventSet event (1);
event.length (1);
event[0].header.source = this->supplier_id ();
event[0].header.ttl = 1;
ACE_hrtime_t t = ACE_OS::gethrtime ();
ORBSVCS_Time::hrtime_to_TimeT (event[0].header.creation_time, t);
// We use replace to minimize the copies, this should result
// in just one memory allocation;
#if (TAO_NO_COPY_OCTET_SEQUENCES == 1)
event[0].data.payload.replace (this->event_size_,
&mb);
#else
// If the replace method is not available, we will need
// to do the copy manually. First, set the octet sequence length.
event[0].data.payload.length (this->event_size_);
// Now copy over each byte.
char* base = mb.data_block ()->base ();
for(CORBA::ULong i = 0; i < (CORBA::ULong)this->event_size_; i++)
{
event[0].data.payload[i] = base[i];
}
#endif /* TAO_NO_COPY_OCTET_SEQUENCES == 1 */
ACE_hrtime_t test_start = ACE_OS::gethrtime ();
for (int i = 0; i < this->burst_count_; ++i)
{
for (int j = 0; j < this->burst_size_; ++j)
{
event[0].header.type =
this->type_start_ + j % this->type_count_;
ACE_hrtime_t request_start = ACE_OS::gethrtime ();
ORBSVCS_Time::hrtime_to_TimeT (event[0].header.creation_time,
request_start);
// ACE_DEBUG ((LM_DEBUG, "(%t) supplier push event\n"));
this->consumer_proxy ()->push (event);
ACE_hrtime_t end = ACE_OS::gethrtime ();
this->throughput_.sample (end - test_start,
end - request_start);
}
if (TAO_debug_level > 0
&& i % 100 == 0)
{
ACE_DEBUG ((LM_DEBUG,
"ECT_Supplier (%P|%t): %d bursts sent\n",
i));
}
ACE_OS::sleep (tv);
}
// Send one event shutdown from each supplier
event[0].header.type = ACE_ES_EVENT_SHUTDOWN;
ACE_hrtime_t request_start = ACE_OS::gethrtime ();
ORBSVCS_Time::hrtime_to_TimeT (event[0].header.creation_time,
request_start);
this->consumer_proxy ()->push(event);
ACE_hrtime_t end = ACE_OS::gethrtime ();
this->throughput_.sample (end - test_start,
end - request_start);
}
catch (const CORBA::SystemException& sys_ex)
{
sys_ex._tao_print_exception ("SYS_EX");
}
catch (const CORBA::Exception& ex)
{
ex._tao_print_exception ("NON SYS EX");
}
ACE_DEBUG ((LM_DEBUG,
"Supplier %4.4x completed\n",
this->supplier_id_));
return 0;
}
示例10: svc
//////////////////////////////////////////////////////////////////
/// <summary>
/// ACE_Task method
/// </summary>
int MgWorkerThread::svc()
{
INT32 nResult = 0;
Ptr<MgException> mgException;
try
{
while (m_bActive)
{
ACE_DEBUG ((LM_DEBUG, ACE_TEXT("(%t) MgWorkerThread::svc() Ready\n")));
ACE_Message_Block* messageBlock = NULL;
nResult = getq(messageBlock);
if(nResult == -1)
{
INT32 nError = ACE_OS::last_error();
if(nError == EINTR)
{
ACE_DEBUG ((LM_DEBUG, ACE_TEXT(" (%t) Interrupted while waiting for message\n")));
ACE_DEBUG ((LM_DEBUG, ACE_TEXT(" (%t) MgWorkerThread - Exiting thread\n")));
return 0;
}
else
{
// There was an error
ACE_DEBUG ((LM_DEBUG, ACE_TEXT(" (%t) MgWorkerThread - Exiting thread\n")));
ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT("%p\n"), ACE_TEXT("MgWorkerThread::svc()")), -1);
}
}
if(messageBlock)
{
if(messageBlock->msg_type() == ACE_Message_Block::MB_STOP)
{
m_bActive = false;
ACE_Message_Block* mb = new ACE_Message_Block(4);
if(mb)
{
mb->msg_type(ACE_Message_Block::MB_STOP);
putq(mb);
}
}
else if(messageBlock->msg_type() == ACE_Message_Block::MB_DATA)
{
// Get the function
MgWorkerThreadData* wtd = (MgWorkerThreadData*)messageBlock->data_block();
if(wtd)
{
void (*function)() = wtd->m_pFunction;
// Execute the function
// We have a try-catch block here to catch anything that is not caught
// by the function we are executing. This is a failsafe to ensure that
// our worker thread is not terminated. Ideally, the function executed
// needs to fully handle all exceptions.
Ptr<MgException> mgException;
try
{
(*function)();
}
catch(MgException* e)
{
MgServerManager* pServerManager = MgServerManager::GetInstance();
ACE_DEBUG ((LM_ERROR, ACE_TEXT("(%t) %W\n"), e->GetDetails(pServerManager->GetDefaultMessageLocale()).c_str()));
MG_LOG_EXCEPTION_ENTRY(e->GetExceptionMessage(pServerManager->GetDefaultMessageLocale()).c_str(), e->GetStackTrace(pServerManager->GetDefaultMessageLocale()).c_str());
SAFE_RELEASE(e);
}
catch(FdoException* e)
{
STRING messageId;
MgStringCollection arguments;
wchar_t* buf = (wchar_t*)e->GetExceptionMessage();
if (NULL != buf)
{
messageId = L"MgFormatInnerExceptionMessage";
arguments.Add(buf);
}
MgServerManager* pServerManager = MgServerManager::GetInstance();
mgException = new MgFdoException(L"MgWorkerThread.svc", __LINE__, __WFILE__, NULL, messageId, &arguments);
ACE_DEBUG ((LM_ERROR, ACE_TEXT("(%t) %W\n"), mgException->GetDetails(pServerManager->GetDefaultMessageLocale()).c_str()));
MG_LOG_EXCEPTION_ENTRY(mgException->GetExceptionMessage(pServerManager->GetDefaultMessageLocale()).c_str(), mgException->GetStackTrace(pServerManager->GetDefaultMessageLocale()).c_str());
FDO_SAFE_RELEASE(e);
}
catch (exception& e)
{
MgServerManager* pServerManager = MgServerManager::GetInstance();
//.........这里部分代码省略.........
示例11: svc
//////////////////////////////////////////////////////////////////
/// <summary>
/// ACE_Task method
/// </summary>
int MgdLogThread::svc()
{
INT32 nResult = 0;
Ptr<MgException> mgException;
try
{
MgdLogManager* pLogManager = MgdLogManager::GetInstance();
while (m_bActive)
{
// ACE_DEBUG ((LM_DEBUG, ACE_TEXT("(%t) MgdLogThread::svc() Ready\n")));
ACE_Message_Block* messageBlock = NULL;
nResult = getq(messageBlock);
if(nResult == -1)
{
INT32 nError = ACE_OS::last_error();
if(nError == EINTR)
{
ACE_DEBUG ((LM_DEBUG, ACE_TEXT(" (%t) Interrupted while waiting for message\n")));
ACE_DEBUG ((LM_DEBUG, ACE_TEXT(" (%t) MgdLogThread - Exiting thread\n")));
return 0;
}
else
{
// There was an error
ACE_DEBUG ((LM_DEBUG, ACE_TEXT(" (%t) MgdLogThread - Exiting thread\n")));
ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT("%p\n"), ACE_TEXT("MgdLogThread::svc()")), -1);
}
}
if(messageBlock)
{
if(messageBlock->msg_type() == ACE_Message_Block::MB_STOP)
{
m_bActive = false;
ACE_Message_Block* mb = new ACE_Message_Block(4);
if(mb)
{
mb->msg_type(ACE_Message_Block::MB_STOP);
putq(mb);
}
}
else if(messageBlock->msg_type() == ACE_Message_Block::MB_DATA)
{
// Get the function
MgdLogEntryData* led = (MgdLogEntryData*)messageBlock->data_block();
if(led)
{
Ptr<MgException> mgException;
try
{
pLogManager->WriteLogMessage(led->m_logType, led->m_message, led->m_logPriority);
}
catch(MgException* e)
{
//MgServerManager* pServerManager = MgServerManager::GetInstance();
//STRING locale = pServerManager->GetDefaultMessageLocale();
STRING locale = MgResources::DefaultMessageLocale;
ACE_DEBUG ((LM_ERROR, ACE_TEXT("(%t) %W\n"), e->GetDetails(locale).c_str()));
MG_LOG_EXCEPTION_ENTRY(e->GetExceptionMessage(locale).c_str(), e->GetStackTrace(locale).c_str());
SAFE_RELEASE(e);
}
catch(FdoException* e)
{
STRING messageId;
MgStringCollection arguments;
wchar_t* buf = (wchar_t*)e->GetExceptionMessage();
if (NULL != buf)
{
messageId = L"MgFormatInnerExceptionMessage";
arguments.Add(buf);
}
//MgServerManager* pServerManager = MgServerManager::GetInstance();
//STRING locale = pServerManager->GetDefaultMessageLocale();
STRING locale = MgResources::DefaultMessageLocale;
mgException = new MgFdoException(L"MgdLogThread.svc", __LINE__, __WFILE__, NULL, messageId, &arguments);
ACE_DEBUG ((LM_ERROR, ACE_TEXT("(%t) %W\n"), mgException->GetDetails(locale).c_str()));
MG_LOG_EXCEPTION_ENTRY(mgException->GetExceptionMessage(locale).c_str(), mgException->GetStackTrace(locale).c_str());
FDO_SAFE_RELEASE(e);
}
catch (exception& e)
{
//MgServerManager* pServerManager = MgServerManager::GetInstance();
//STRING locale = pServerManager->GetDefaultMessageLocale();
STRING locale = MgResources::DefaultMessageLocale;
mgException = MgSystemException::Create(e, L"MgdLogThread.svc", __LINE__, __WFILE__);
//.........这里部分代码省略.........
示例12: add_member
void TAO_FTEC_Group_Manager::add_member (
const FTRT::ManagerInfo & info,
CORBA::ULong object_group_ref_version)
{
TAO_FTRTEC::Log(1, ACE_TEXT("add_member location = <%s>\n"),
(const char*)info.the_location[0].id);
auto_ptr<TAO_FTEC_Group_Manager_Impl> new_impl(new TAO_FTEC_Group_Manager_Impl);
new_impl->my_position = impl_->my_position;
size_t pos = impl_->info_list.length();
new_impl->info_list.length(pos+1);
for (size_t i = 0; i < pos; ++i) {
new_impl->info_list[i] = impl_->info_list[i];
}
new_impl->info_list[pos] = info;
GroupInfoPublisherBase* publisher = GroupInfoPublisher::instance();
GroupInfoPublisherBase::Info_ptr group_info (
publisher->setup_info(new_impl->info_list,
new_impl->my_position,
object_group_ref_version));
int last_one = (impl_->my_position == impl_->info_list.length()-1);
if (!last_one)
{
// I am not the last of replica, tell my successor that
// a new member has joined in.
try{
FTRTEC::Replication_Service::instance()->add_member(info, object_group_ref_version);
}
catch (const CORBA::Exception&){
// Unable to send request to all the successors.
// Now this node become the last replica of the object group.
// update the info list again
new_impl->info_list.length(new_impl->my_position+2);
new_impl->info_list[new_impl->my_position+1] = info;
/// group_info = publisher->set_info(..) should be enough.
/// However, GCC 2.96 is not happy with that.
GroupInfoPublisherBase::Info_ptr group_info1 (
publisher->setup_info(new_impl->info_list,
new_impl->my_position,
object_group_ref_version));
ACE_auto_ptr_reset(group_info, group_info1.release());
last_one = true;
}
}
if (last_one)
{
// this is the last replica in the list
// synchornize the state with the newly joined replica.
FtRtecEventChannelAdmin::EventChannelState state;
get_state(state);
TAO_OutputCDR cdr;
cdr << state;
FTRT::State s;
if (cdr.begin()->cont()) {
ACE_Message_Block* blk;
ACE_NEW_THROW_EX(blk, ACE_Message_Block, CORBA::NO_MEMORY());
ACE_CDR::consolidate(blk, cdr.begin());
#if (TAO_NO_COPY_OCTET_SEQUENCES == 1)
s.replace(blk->length(), blk);
#else
// If the replace method is not available, we will need
// to do the copy manually. First, set the octet sequence length.
CORBA::ULong length = blk->length ();
s.length (length);
// Now copy over each byte.
char* base = blk->data_block ()->base ();
for(CORBA::ULong i = 0; i < length; i++)
{
s[i] = base[i];
}
#endif /* TAO_NO_COPY_OCTET_SEQUENCES == 1 */
blk->release();
}
else {
#if (TAO_NO_COPY_OCTET_SEQUENCES == 1)
s.replace(cdr.begin()->length(), cdr.begin());
#else
// If the replace method is not available, we will need
// to do the copy manually. First, set the octet sequence length.
CORBA::ULong length = cdr.begin ()->length ();
s.length (length);
// Now copy over each byte.
char* base = cdr.begin()->data_block ()->base ();
for(CORBA::ULong i = 0; i < length; i++)
{
s[i] = base[i];
}
//.........这里部分代码省略.........