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]

List of all members.

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

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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

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 
) [inline, explicit, protected]

Definition at line 529 of file SafetyProfileSequence.h.

00532     : AllocPolicy<T, Sequence, Bounds>(maximum)
00533     , length_(length)
00534     , release_(release)
00535     , buffer_(data)
00536   {
00537   }

template<typename T , typename Bounds , typename Elts >
OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::Sequence ( const Sequence< T, Bounds, Elts > &  seq  )  [inline, protected]

Definition at line 540 of file SafetyProfileSequence.h.

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

00541     : AllocPolicy<T, Sequence, Bounds>(seq.maximum())
00542     , length_(seq.length_)
00543     , release_(true)
00544     , buffer_((seq.maximum() && seq.buffer_) ? allocate() : 0)
00545   {
00546     if (buffer_) {
00547       Elts::copy_n(seq.buffer_, length_, buffer_);
00548     }
00549   }

template<typename T , typename Bounds , typename Elts >
OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::~Sequence (  )  [inline, protected]

Member Function Documentation

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.

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

00302 { return buffer_; }

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.

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

00301 { return buffer_; }

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.

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

00312 { return !length_; }

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

Definition at line 656 of file SafetyProfileSequence.h.

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

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

00657   {
00658     if (!data) return;
00659     T* const allocated = Elts::destroy(data, Bounds::Bounds);
00660     ACE_Allocator::instance()->free(allocated);
00661   }

Here is the call graph for this function:

Here is the caller graph for this function:

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

Definition at line 649 of file SafetyProfileSequence.h.

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

00650   {
00651     lazy_alloc();
00652     return buffer_;
00653   }

Here is the call graph for this function:

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 629 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().

00630   {
00631     if (orphan && !release_) {
00632       return 0;
00633     }
00634 
00635     lazy_alloc();
00636 
00637     if (orphan) {
00638       Sequence tmp;
00639       swap(tmp);
00640       tmp.release_ = false;
00641       return tmp.buffer_;
00642     }
00643 
00644     return buffer_;
00645   }

Here is the call graph for this function:

template<typename T , typename Bounds , typename Elts >
void OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::lazy_alloc (  )  const [inline, private]
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.

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

00265 { return length_; }

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

Definition at line 596 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().

00597   {
00598     if (len <= maximum()) {
00599       if (len && !buffer_) {
00600         lazy_alloc();
00601       }
00602       else if (release_ && len < length_) {
00603         Elts::reset_n(buffer_ + len, length_ - len);
00604       }
00605       length_ = len;
00606       return;
00607     }
00608 
00609     Sequence tmp(len, len, allocate(len), true);
00610     Elts::move_n(buffer_, length_, tmp.buffer_);
00611     swap(tmp);
00612   }

Here is the call graph for this function:

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 679 of file SafetyProfileSequence.h.

00680   {
00681     return !(*this == rhs);
00682   }

template<typename T , typename Bounds , typename Elts >
Sequence< T, Bounds, Elts > & OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::operator= ( const Sequence< T, Bounds, Elts > &  seq  )  [inline, protected]

Definition at line 561 of file SafetyProfileSequence.h.

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

00562   {
00563     Sequence cpy(seq);
00564     swap(cpy);
00565     return *this;
00566   }

Here is the call graph for this function:

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 664 of file SafetyProfileSequence.h.

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

00665   {
00666     const size_type sz = size();
00667     if (sz != rhs.size()) {
00668       return false;
00669     }
00670     for (size_type i = 0; i < sz; ++i) {
00671       if (!((*this)[i] == rhs[i])) {
00672         return false;
00673       }
00674     }
00675     return true;
00676   }

Here is the call graph for this function:

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

Definition at line 623 of file SafetyProfileSequence.h.

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

00624   {
00625     return Elts::make_element(buffer_[idx], release_);
00626   }

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

Definition at line 616 of file SafetyProfileSequence.h.

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

00617   {
00618     return buffer_[idx];
00619   }

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
seq_flag_type OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::release ( void   )  const [inline]
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 
) [inline, private]

Definition at line 578 of file SafetyProfileSequence.h.

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

00581   {
00582     Sequence tmp(maximum, length, data, release);
00583     swap(tmp);
00584   }

Here is the call graph for this function:

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

Definition at line 310 of file SafetyProfileSequence.h.

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

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

00310 { return length_; }

Here is the caller graph for this function:

template<typename T , typename Bounds , typename Elts >
void OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::swap ( Sequence< T, Bounds, Elts > &  rhs  )  throw () [inline, protected]

Friends And Related Function Documentation

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

Definition at line 316 of file SafetyProfileSequence.h.


Member Data Documentation

template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
T* OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::buffer_ [mutable, private]
template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
size_type OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::length_ [private]
template<typename T, typename Bounds, typename Elts = DefaultEltPolicy<T>>
seq_flag_type OpenDDS::SafetyProfile::Sequence< T, Bounds, Elts >::release_ [mutable, private]

The documentation for this class was generated from the following file:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 10 Aug 2018 for OpenDDS by  doxygen 1.6.1