OpenDDS  Snapshot(2023/04/28-20:55)
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts > Class Template Reference

#include <SafetyProfileSequence.h>

Inheritance diagram for OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >:
Inheritance graph
[legend]
Collaboration diagram for OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >:
Collaboration graph
[legend]

Public Types

typedef seq_size_type size_type
 
typedef seq_size_type _size_type
 
typedef Elts ElementPolicy
 
typedef Elts::Element Element
 
typedef Elts::ConstElement ConstElement
 
typedef Elts::ConstRawElement ConstRawElement
 
typedef ConstElement const_subscript_type
 
typedef Element subscript_type
 
typedef T value_type
 
typedef T & reference
 
typedef const T & const_reference
 
typedef T * iterator
 
typedef const T * const_iterator
 
typedef std::ptrdiff_t difference_type
 

Public Member Functions

void length (size_type len)
 
size_type length () const
 
ConstElement operator[] (size_type idx) const
 
Element operator[] (size_type idx)
 
seq_flag_type release () const
 
T * get_buffer (seq_flag_type orphan=false)
 
const ConstRawElementget_buffer () const
 
const T * begin () const
 
T * begin ()
 
const T * end () const
 
T * end ()
 
bool operator== (const Sequence &rhs) const
 
bool operator!= (const Sequence &rhs) const
 
size_type size () const
 
bool empty () const
 

Static Public Member Functions

static void freebuf (T *data)
 

Protected Member Functions

 Sequence (size_type maximum=0, size_type length=0, T *data=0, seq_flag_type release=false)
 
 Sequence (const Sequence &seq)
 
 ~Sequence ()
 
Sequenceoperator= (const Sequence &seq)
 
void swap (Sequence &rhs) throw ()
 

Private Member Functions

void replace_i (size_type maximum, size_type length, T *data, seq_flag_type release)
 
void lazy_alloc () const
 

Private Attributes

size_type length_
 
seq_flag_type release_
 
T * buffer_
 

Friends

struct AllocPolicy< T, Sequence, Bounds >
 

Detailed Description

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
class OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >

Generic base class for all IDL-defined sequences accepted by opendds_idl. Derived classes (generated by opendds_idl) need to provide the following methods to be compliant with the IDL-to-C++ specification: If bounded:

Definition at line 246 of file SafetyProfileSequence.h.

Member Typedef Documentation

◆ _size_type

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
typedef seq_size_type OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::_size_type

Definition at line 251 of file SafetyProfileSequence.h.

◆ const_iterator

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
typedef const T* OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::const_iterator

Definition at line 298 of file SafetyProfileSequence.h.

◆ const_reference

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
typedef const T& OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::const_reference

Definition at line 296 of file SafetyProfileSequence.h.

◆ const_subscript_type

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
typedef ConstElement OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::const_subscript_type

Definition at line 271 of file SafetyProfileSequence.h.

◆ ConstElement

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
typedef Elts::ConstElement OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::ConstElement

Definition at line 268 of file SafetyProfileSequence.h.

◆ ConstRawElement

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
typedef Elts::ConstRawElement OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::ConstRawElement

Definition at line 269 of file SafetyProfileSequence.h.

◆ difference_type

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
typedef std::ptrdiff_t OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::difference_type

Definition at line 299 of file SafetyProfileSequence.h.

◆ Element

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
typedef Elts::Element OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::Element

Definition at line 267 of file SafetyProfileSequence.h.

◆ ElementPolicy

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
typedef Elts OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::ElementPolicy

Definition at line 252 of file SafetyProfileSequence.h.

◆ iterator

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
typedef T* OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::iterator

Definition at line 297 of file SafetyProfileSequence.h.

◆ reference

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
typedef T& OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::reference

Definition at line 295 of file SafetyProfileSequence.h.

◆ size_type

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
typedef seq_size_type OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::size_type

Definition at line 250 of file SafetyProfileSequence.h.

◆ subscript_type

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
typedef Element OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::subscript_type

Definition at line 272 of file SafetyProfileSequence.h.

◆ value_type

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
typedef T OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::value_type

Definition at line 294 of file SafetyProfileSequence.h.

Constructor & Destructor Documentation

◆ Sequence() [1/2]

template<typename T , typename Bounds , typename Elts >
OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::Sequence ( size_type  maximum = 0,
size_type  length = 0,
T *  data = 0,
seq_flag_type  release = false 
)
inlineexplicitprotected

◆ Sequence() [2/2]

template<typename T , typename Bounds , typename Elts >
OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::Sequence ( const Sequence< T, Bounds, Elts > &  seq)
inlineprotected

Definition at line 538 of file SafetyProfileSequence.h.

References OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::buffer_, and OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::length_.

539  : AllocPolicy<T, Sequence, Bounds>(seq.maximum())
540  , length_(seq.length_)
541  , release_(true)
542  , buffer_((seq.maximum() && seq.buffer_) ? allocate() : 0)
543  {
544  if (buffer_) {
545  Elts::copy_n(seq.buffer_, length_, buffer_);
546  }
547  }

◆ ~Sequence()

template<typename T , typename Bounds , typename Elts >
OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::~Sequence ( )
inlineprotected

Member Function Documentation

◆ begin() [1/2]

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
const T* OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::begin ( void  ) const
inline

Definition at line 301 of file SafetyProfileSequence.h.

◆ begin() [2/2]

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
T* OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::begin ( void  )
inline

Definition at line 302 of file SafetyProfileSequence.h.

◆ empty()

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
bool OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::empty ( void  ) const
inline

Definition at line 312 of file SafetyProfileSequence.h.

◆ end() [1/2]

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
const T* OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::end ( void  ) const
inline

◆ end() [2/2]

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
T* OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::end ( void  )
inline

◆ freebuf()

template<typename T , typename Bounds , typename Elts >
void OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::freebuf ( T *  data)
inlinestatic

Definition at line 654 of file SafetyProfileSequence.h.

References ACE_Allocator::free(), and ACE_Allocator::instance().

Referenced by OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::~Sequence().

655  {
656  if (!data) return;
657  T* const allocated = Elts::destroy(data, Bounds::Bounds);
658  ACE_Allocator::instance()->free(allocated);
659  }
virtual void free(void *ptr)=0
static ACE_Allocator * instance(void)

◆ get_buffer() [1/2]

template<typename T , typename Bounds , typename Elts >
T * OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::get_buffer ( seq_flag_type  orphan = false)
inline

Definition at line 627 of file SafetyProfileSequence.h.

References OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::buffer_, OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::lazy_alloc(), OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::release_, and OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::swap().

628  {
629  if (orphan && !release_) {
630  return 0;
631  }
632 
633  lazy_alloc();
634 
635  if (orphan) {
636  Sequence tmp;
637  swap(tmp);
638  tmp.release_ = false;
639  return tmp.buffer_;
640  }
641 
642  return buffer_;
643  }
Sequence(size_type maximum=0, size_type length=0, T *data=0, seq_flag_type release=false)

◆ get_buffer() [2/2]

template<typename T , typename Bounds , typename Elts >
const Sequence< T, Bounds, Elts >::ConstRawElement * OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::get_buffer ( ) const
inline

◆ lazy_alloc()

template<typename T , typename Bounds , typename Elts >
void OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::lazy_alloc ( ) const
inlineprivate

◆ length() [1/2]

template<typename T , typename Bounds , typename Elts >
void OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::length ( size_type  len)
inline

Definition at line 594 of file SafetyProfileSequence.h.

References OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::buffer_, OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::lazy_alloc(), OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::length_, OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::release_, and OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::swap().

595  {
596  if (len <= maximum()) {
597  if (len && !buffer_) {
598  lazy_alloc();
599  }
600  else if (release_ && len < length_) {
601  Elts::reset_n(buffer_ + len, length_ - len);
602  }
603  length_ = len;
604  return;
605  }
606 
607  Sequence tmp(len, len, allocate(len), true);
608  Elts::move_n(buffer_, length_, tmp.buffer_);
609  swap(tmp);
610  }
Sequence(size_type maximum=0, size_type length=0, T *data=0, seq_flag_type release=false)

◆ length() [2/2]

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
size_type OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::length ( void  ) const
inline

Definition at line 265 of file SafetyProfileSequence.h.

◆ operator!=()

template<typename T , typename Bounds , typename Elts >
bool OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::operator!= ( const Sequence< T, Bounds, Elts > &  rhs) const
inline

Definition at line 677 of file SafetyProfileSequence.h.

678  {
679  return !(*this == rhs);
680  }

◆ operator=()

template<typename T , typename Bounds , typename Elts >
Sequence< T, Bounds, Elts > & OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::operator= ( const Sequence< T, Bounds, Elts > &  seq)
inlineprotected

Definition at line 559 of file SafetyProfileSequence.h.

References OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::swap().

560  {
561  Sequence cpy(seq);
562  swap(cpy);
563  return *this;
564  }
Sequence(size_type maximum=0, size_type length=0, T *data=0, seq_flag_type release=false)

◆ operator==()

template<typename T , typename Bounds , typename Elts >
bool OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::operator== ( const Sequence< T, Bounds, Elts > &  rhs) const
inline

Definition at line 662 of file SafetyProfileSequence.h.

References OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::size().

663  {
664  const size_type sz = size();
665  if (sz != rhs.size()) {
666  return false;
667  }
668  for (size_type i = 0; i < sz; ++i) {
669  if (!((*this)[i] == rhs[i])) {
670  return false;
671  }
672  }
673  return true;
674  }

◆ operator[]() [1/2]

template<typename T , typename Bounds , typename Elts >
Sequence< T, Bounds, Elts >::ConstElement OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::operator[] ( size_type  idx) const
inline

◆ operator[]() [2/2]

template<typename T , typename Bounds , typename Elts >
Sequence< T, Bounds, Elts >::Element OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::operator[] ( size_type  idx)
inline

◆ release()

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
seq_flag_type OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::release ( void  ) const
inline

Definition at line 277 of file SafetyProfileSequence.h.

277 { return release_; }

◆ replace_i()

template<typename T , typename Bounds , typename Elts >
void OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::replace_i ( size_type  maximum,
size_type  length,
T *  data,
seq_flag_type  release 
)
inlineprivate

◆ size()

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
size_type OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::size ( void  ) const
inline

◆ swap()

template<typename T , typename Bounds , typename Elts >
void OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::swap ( Sequence< T, Bounds, Elts > &  rhs)
throw (
)
inlineprotected

Friends And Related Function Documentation

◆ AllocPolicy< T, Sequence, Bounds >

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
friend struct AllocPolicy< T, Sequence, Bounds >
friend

Definition at line 315 of file SafetyProfileSequence.h.

Member Data Documentation

◆ buffer_

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
T* OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::buffer_
mutableprivate

◆ length_

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
size_type OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::length_
private

◆ release_

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
seq_flag_type OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::release_
mutableprivate

The documentation for this class was generated from the following file: