30 #ifndef _CORBA_TYPE_MANIPULATION_HXX_
31 #define _CORBA_TYPE_MANIPULATION_HXX_
35 #include <omniORB4/CORBA.h>
65 template <
typename T >
72 typedef const T & CorbaInType;
77 static inline Type get_data(CorbaInType data) {
82 static inline InnerType *
const getPointer(Type data,
bool ownerShip =
false) {
86 static inline void relPointer(InnerType * dataPtr) {
91 static inline Type clone(Type data) {
92 return new T (* data);
94 static inline Type clone(CorbaInType data) {
99 static inline Type create (
size_t size=1) {
104 static inline void delete_data(Type data) {
109 static inline size_t size(Type data) {
114 static inline void dump (CorbaInType data) {}
124 template <
typename T>
130 typedef T CorbaInType;
135 static inline Type get_data(CorbaInType data) {
139 static inline InnerType *
const getPointer(Type & data,
bool getOwnerShip =
false) {
161 static inline Type clone(Type data) {
181 static inline void delete_data(Type data) {}
184 static inline size_t size(Type data) {
189 static void inline dump (CorbaInType data) {
190 std::cerr <<
"[atom_manipulation] Data : " << data << std::endl;
197 template <
typename seq_T,
typename elem_T>
201 typedef seq_T * Type;
202 typedef const seq_T & CorbaInType;
203 typedef elem_T InnerType;
209 static inline Type get_data(CorbaInType data) {
210 CORBA::Long len = data.length();
211 CORBA::Long max = data.maximum();
233 std::cout <<
"----seq_u_manipulation::get_data(..)-- MARK 1 ------------------" << std::endl;
235 if ( data.release() ) {
236 InnerType * p_data =
const_cast<seq_T &
>(data).get_buffer(
true);
242 std::cout <<
"----seq_u_manipulation::get_data(..)-- MARK 1(0 copy) bis ------"<< p_data <<
"------------" << std::endl;
245 return new seq_T (max, len, p_data,
true);
248 std::cout <<
"----seq_u_manipulation::get_data(..)-- MARK 1(recopie) bis ------"<< &data <<
"------------" << std::endl;
251 return new seq_T(data);
255 static inline size_t size(Type data) {
256 return data->length();
260 static inline void delete_data(Type data) {
269 static inline Type clone(Type data) {
270 return new seq_T (*data) ;
272 static inline Type clone(CorbaInType data) {
273 return new seq_T (data);
283 static inline InnerType *
const getPointer(Type data,
bool ownerShip =
false) {
286 p_data = data->get_buffer(
true);
289 p_data = data->get_buffer(
false);
295 static inline void relPointer(InnerType * dataPtr) {
296 seq_T::freebuf(dataPtr);
300 static inline InnerType * allocPointer(
size_t size ) {
301 return seq_T::allocbuf(size);
309 static inline Type create(
size_t size, InnerType *
const data = NULL,
310 bool giveOwnerShip =
false ) {
316 tmp =
new seq_T(size,size,data,giveOwnerShip);
323 template <
typename T >
324 static inline void copy( Type data, T *
const idata,
size_t isize ) {
326 InnerType *dataPtr = getPointer(data,
false);
328 for (
int i = 0; i< isize; ++i)
349 static inline void copy( Type data,
char* *
const idata,
size_t isize ) {
351 char* *dataPtr = getPointer(data,
false);
355 for (
int i = 0; i< isize; ++i)
356 strcpy(idata[i],dataPtr[i]);
360 static void inline dump (CorbaInType data) {
362 std::cerr <<
"[seq_u_manipulation] Data length: " << data.length() << std::endl;
364 std::cerr <<
"[seq_u_manipulation] Data max: " << data.maximum() << std::endl;
377 template <
typename seq_T,
typename elem_T>
381 typedef seq_T * Type;
382 typedef const seq_T & CorbaInType;
383 typedef elem_T InnerType;
391 static inline Type get_data(CorbaInType data) {
392 CORBA::Long len = data.length();
396 if ( data.release() ) {
397 InnerType * p_data =
const_cast<seq_T &
>(data).get_buffer(
true);
403 std::cout <<
"----seq_u_manipulation::get_data(..)-- MARK 1bis Pas de Duplication -----------" << std::endl;
405 return new seq_T (len, p_data,
true);
408 std::cout <<
"----seq_u_manipulation::get_data(..)-- MARK 1bis Duplication pour en devenir propriétaire -----------" << std::endl;
411 return new seq_T(data);
415 static inline size_t size(Type data) {
416 return data->length();
421 static inline Type clone(Type data) {
422 return new seq_T (* data);
424 static inline Type clone(CorbaInType data) {
425 return new seq_T (data);
429 static inline void delete_data(Type data) {
440 static inline InnerType *
const getPointer(Type data,
bool getOwnerShip =
false) {
443 p_data = data->get_buffer(
true);
446 p_data = data->get_buffer(
false);
453 static inline void relPointer(InnerType * dataPtr) {
454 seq_T::freebuf(dataPtr);
458 static inline InnerType * allocPointer(
size_t size ) {
459 return seq_T::allocbuf(size);
467 static inline Type create(
size_t size, InnerType *
const data = NULL,
468 bool giveOwnerShip =
false ) {
474 tmp =
new seq_T(size,data,giveOwnerShip);
481 static inline void dump (CorbaInType data) {
483 std::cerr <<
"[seq_b_manipulation] Data length: " << data.length() << std::endl;