This is Unofficial EPICS BASE Doxygen Site
epics::pvData::detail::shared_vector_base< E > Class Template Reference

#include "sharedVector.h"

+ Inheritance diagram for epics::pvData::detail::shared_vector_base< E >:
+ Collaboration diagram for epics::pvData::detail::shared_vector_base< E >:

Public Member Functions

 shared_vector_base ()
 Empty vector (not very interesting) More...
 
template<typename A >
 shared_vector_base (A *v, size_t o, size_t c)
 
 shared_vector_base (const std::tr1::shared_ptr< E > &d, size_t o, size_t c)
 
template<typename A , typename B >
 shared_vector_base (A d, B b, size_t o, size_t c)
 
 shared_vector_base (const shared_vector_base &O)
 
 shared_vector_base (shared_vector_base< _E_non_const > &O, _shared_vector_freeze_tag)
 
 shared_vector_base (shared_vector< const E > &O, _shared_vector_thaw_tag)
 
shared_vector_baseoperator= (const shared_vector_base &o)
 Copy an existing vector. More...
 
void swap (shared_vector_base &o)
 Swap the contents of this vector with another. More...
 
void clear ()
 Clear contents. size() becomes 0. More...
 
bool unique () const
 Data is not shared? More...
 
size_t size () const
 Number of elements visible through this vector. More...
 
bool empty () const
 shorthand for size()==0 More...
 
void slice (size_t offset, size_t length=(size_t)-1)
 Reduce the view of this shared_vector. More...
 
const std::tr1::shared_ptr< E > & dataPtr () const
 
size_t dataOffset () const
 
size_t dataCount () const
 
size_t dataTotal () const
 

Protected Types

typedef meta::strip_const< E >::type _E_non_const
 

Protected Member Functions

void _null_input ()
 

Protected Attributes

std::tr1::shared_ptr< E > m_sdata
 
size_t m_offset
 Offset in the data array of first visible element. More...
 
size_t m_count
 Number of visible elements between m_offset and end of data. More...
 
size_t m_total
 Total number of elements between m_offset and the end of data. More...
 

Friends

template<typename E1 >
class shared_vector_base
 

Detailed Description

template<typename E>
class epics::pvData::detail::shared_vector_base< E >

Definition at line 53 of file sharedVector.h.

Member Typedef Documentation

template<typename E>
typedef meta::strip_const<E>::type epics::pvData::detail::shared_vector_base< E >::_E_non_const
protected

Definition at line 132 of file sharedVector.h.

Constructor & Destructor Documentation

template<typename E>
epics::pvData::detail::shared_vector_base< E >::shared_vector_base ( )
inline

Empty vector (not very interesting)

Definition at line 80 of file sharedVector.h.

81  :m_sdata(), m_offset(0), m_count(0), m_total(0)
82  {}
size_t m_count
Number of visible elements between m_offset and end of data.
Definition: sharedVector.h:63
size_t m_offset
Offset in the data array of first visible element.
Definition: sharedVector.h:61
size_t m_total
Total number of elements between m_offset and the end of data.
Definition: sharedVector.h:65
std::tr1::shared_ptr< E > m_sdata
Definition: sharedVector.h:59
template<typename E>
template<typename A >
epics::pvData::detail::shared_vector_base< E >::shared_vector_base ( A *  v,
size_t  o,
size_t  c 
)
inline

Definition at line 100 of file sharedVector.h.

101  :m_sdata(v, detail::default_array_deleter<A*>())
102  ,m_offset(o), m_count(c), m_total(c)
103  {_null_input();}
size_t m_count
Number of visible elements between m_offset and end of data.
Definition: sharedVector.h:63
size_t m_offset
Offset in the data array of first visible element.
Definition: sharedVector.h:61
size_t m_total
Total number of elements between m_offset and the end of data.
Definition: sharedVector.h:65
std::tr1::shared_ptr< E > m_sdata
Definition: sharedVector.h:59
template<typename E>
epics::pvData::detail::shared_vector_base< E >::shared_vector_base ( const std::tr1::shared_ptr< E > &  d,
size_t  o,
size_t  c 
)
inline

Definition at line 105 of file sharedVector.h.

106  :m_sdata(d), m_offset(o), m_count(c), m_total(c)
107  {_null_input();}
size_t m_count
Number of visible elements between m_offset and end of data.
Definition: sharedVector.h:63
size_t m_offset
Offset in the data array of first visible element.
Definition: sharedVector.h:61
size_t m_total
Total number of elements between m_offset and the end of data.
Definition: sharedVector.h:65
std::tr1::shared_ptr< E > m_sdata
Definition: sharedVector.h:59
template<typename E>
template<typename A , typename B >
epics::pvData::detail::shared_vector_base< E >::shared_vector_base ( d,
b,
size_t  o,
size_t  c 
)
inline

Definition at line 111 of file sharedVector.h.

112  :m_sdata(d,b), m_offset(o), m_count(c), m_total(c)
113  {_null_input();}
size_t m_count
Number of visible elements between m_offset and end of data.
Definition: sharedVector.h:63
size_t m_offset
Offset in the data array of first visible element.
Definition: sharedVector.h:61
size_t m_total
Total number of elements between m_offset and the end of data.
Definition: sharedVector.h:65
std::tr1::shared_ptr< E > m_sdata
Definition: sharedVector.h:59
template<typename E>
epics::pvData::detail::shared_vector_base< E >::shared_vector_base ( const shared_vector_base< E > &  O)
inline

Definition at line 115 of file sharedVector.h.

116  :m_sdata(O.m_sdata), m_offset(O.m_offset)
117  ,m_count(O.m_count), m_total(O.m_total)
118  {}
size_t m_count
Number of visible elements between m_offset and end of data.
Definition: sharedVector.h:63
size_t m_offset
Offset in the data array of first visible element.
Definition: sharedVector.h:61
size_t m_total
Total number of elements between m_offset and the end of data.
Definition: sharedVector.h:65
std::tr1::shared_ptr< E > m_sdata
Definition: sharedVector.h:59

Constructor used to implement freeze(). Should not be called directly.

Definition at line 136 of file sharedVector.h.

138  :m_sdata()
139  ,m_offset(O.m_offset)
140  ,m_count(O.m_count)
141  ,m_total(O.m_total)
142  {
143  if(!O.unique())
144  throw std::runtime_error("Can't freeze non-unique vector");
145 #if __cplusplus >= 201103L
146  m_sdata = std::move(O.m_sdata);
147 #else
148  m_sdata = O.m_sdata;
149 #endif
150  O.clear();
151  }
size_t m_count
Number of visible elements between m_offset and end of data.
Definition: sharedVector.h:63
size_t m_offset
Offset in the data array of first visible element.
Definition: sharedVector.h:61
size_t m_total
Total number of elements between m_offset and the end of data.
Definition: sharedVector.h:65
std::tr1::shared_ptr< E > m_sdata
Definition: sharedVector.h:59
template<typename E>
epics::pvData::detail::shared_vector_base< E >::shared_vector_base ( shared_vector< const E > &  O,
_shared_vector_thaw_tag   
)
inline

Constructor used to implement thaw(). Should not be called directly.

Definition at line 155 of file sharedVector.h.

157  :m_sdata()
158  ,m_offset(O.m_offset)
159  ,m_count(O.m_count)
160  ,m_total(O.m_total)
161  {
162  O.make_unique();
163 #if __cplusplus >= 201103L
164  m_sdata = std::move(std::tr1::const_pointer_cast<E>(O.m_sdata));
165 #else
166  m_sdata = std::tr1::const_pointer_cast<E>(O.m_sdata);
167 #endif
168  O.clear();
169  }
size_t m_count
Number of visible elements between m_offset and end of data.
Definition: sharedVector.h:63
size_t m_offset
Offset in the data array of first visible element.
Definition: sharedVector.h:61
size_t m_total
Total number of elements between m_offset and the end of data.
Definition: sharedVector.h:65
shared_ptr< T > const_pointer_cast(shared_ptr< U > const &r) BOOST_NOEXCEPT
Definition: shared_ptr.hpp:798
std::tr1::shared_ptr< E > m_sdata
Definition: sharedVector.h:59

Member Function Documentation

template<typename E>
void epics::pvData::detail::shared_vector_base< E >::_null_input ( )
inlineprotected

Definition at line 88 of file sharedVector.h.

89  {
90  if(!m_sdata) {
91  m_offset = m_total = m_count = 0;
92  } else {
93  // ensure we won't have integer overflows later
94  assert( m_offset <= ((size_t)-1) - m_total);
95  }
96  }
#define assert(exp)
Declare that a condition should be true.
Definition: epicsAssert.h:70
size_t m_count
Number of visible elements between m_offset and end of data.
Definition: sharedVector.h:63
size_t m_offset
Offset in the data array of first visible element.
Definition: sharedVector.h:61
size_t m_total
Total number of elements between m_offset and the end of data.
Definition: sharedVector.h:65
std::tr1::shared_ptr< E > m_sdata
Definition: sharedVector.h:59
template<typename E>
void epics::pvData::detail::shared_vector_base< E >::clear ( )
inline

Clear contents. size() becomes 0.

Definition at line 210 of file sharedVector.h.

210  {
211  m_sdata.reset();
212  m_offset = m_total = m_count = 0;
213  }
size_t m_count
Number of visible elements between m_offset and end of data.
Definition: sharedVector.h:63
size_t m_offset
Offset in the data array of first visible element.
Definition: sharedVector.h:61
size_t m_total
Total number of elements between m_offset and the end of data.
Definition: sharedVector.h:65
std::tr1::shared_ptr< E > m_sdata
Definition: sharedVector.h:59
template<typename E>
size_t epics::pvData::detail::shared_vector_base< E >::dataCount ( ) const
inline

Definition at line 263 of file sharedVector.h.

263 { return m_count; }
size_t m_count
Number of visible elements between m_offset and end of data.
Definition: sharedVector.h:63
template<typename E>
size_t epics::pvData::detail::shared_vector_base< E >::dataOffset ( ) const
inline

Definition at line 262 of file sharedVector.h.

262 { return m_offset; }
size_t m_offset
Offset in the data array of first visible element.
Definition: sharedVector.h:61
template<typename E>
const std::tr1::shared_ptr<E>& epics::pvData::detail::shared_vector_base< E >::dataPtr ( ) const
inline

Definition at line 261 of file sharedVector.h.

261 { return m_sdata; }
std::tr1::shared_ptr< E > m_sdata
Definition: sharedVector.h:59
template<typename E>
size_t epics::pvData::detail::shared_vector_base< E >::dataTotal ( ) const
inline

Definition at line 264 of file sharedVector.h.

264 { return m_total; }
size_t m_total
Total number of elements between m_offset and the end of data.
Definition: sharedVector.h:65
template<typename E>
bool epics::pvData::detail::shared_vector_base< E >::empty ( ) const
inline

shorthand for size()==0

Definition at line 222 of file sharedVector.h.

222 {return !m_count;}
size_t m_count
Number of visible elements between m_offset and end of data.
Definition: sharedVector.h:63
template<typename E>
shared_vector_base& epics::pvData::detail::shared_vector_base< E >::operator= ( const shared_vector_base< E > &  o)
inline

Copy an existing vector.

Definition at line 172 of file sharedVector.h.

173  {
174  if(&o!=this) {
175  m_sdata=o.m_sdata;
176  m_offset=o.m_offset;
177  m_count=o.m_count;
178  m_total=o.m_total;
179  }
180  return *this;
181  }
size_t m_count
Number of visible elements between m_offset and end of data.
Definition: sharedVector.h:63
size_t m_offset
Offset in the data array of first visible element.
Definition: sharedVector.h:61
size_t m_total
Total number of elements between m_offset and the end of data.
Definition: sharedVector.h:65
std::tr1::shared_ptr< E > m_sdata
Definition: sharedVector.h:59
template<typename E>
size_t epics::pvData::detail::shared_vector_base< E >::size ( ) const
inline

Number of elements visible through this vector.

Definition at line 220 of file sharedVector.h.

220 {return m_count;}
size_t m_count
Number of visible elements between m_offset and end of data.
Definition: sharedVector.h:63
template<typename E>
void epics::pvData::detail::shared_vector_base< E >::slice ( size_t  offset,
size_t  length = (size_t)-1 
)
inline

Reduce the view of this shared_vector.

Reduce the portion of the underlying buffer which is accessible through this shared_vector.

When the requested new offset and length are not possible then the following holds.

When offset is >= size() then after slice() size()==0. When length >= size()-offset then after slice() size() = old_size-offset.

Parameters
offsetThe request new offset relative to the current offset.
lengthThe requested new length.
Note
offset and length are in units of sizeof(E). or bytes (1) when E=void.

Definition at line 244 of file sharedVector.h.

245  {
246  if(offset>m_count)
247  offset = m_count; // will slice down to zero length
248 
249  const size_t max_count = m_count - offset;
250 
251  m_offset += offset;
252 
253  m_total -= offset;
254 
255  if(length > max_count)
256  length = max_count;
257  m_count = length;
258  }
size_t m_count
Number of visible elements between m_offset and end of data.
Definition: sharedVector.h:63
size_t m_offset
Offset in the data array of first visible element.
Definition: sharedVector.h:61
size_t m_total
Total number of elements between m_offset and the end of data.
Definition: sharedVector.h:65
template<typename E>
void epics::pvData::detail::shared_vector_base< E >::swap ( shared_vector_base< E > &  o)
inline

Swap the contents of this vector with another.

Definition at line 199 of file sharedVector.h.

199  {
200  if(&o!=this) {
201  m_sdata.swap(o.m_sdata);
202  std::swap(m_count, o.m_count);
203  std::swap(m_offset, o.m_offset);
204  std::swap(m_total, o.m_total);
205  }
206  }
size_t m_count
Number of visible elements between m_offset and end of data.
Definition: sharedVector.h:63
size_t m_offset
Offset in the data array of first visible element.
Definition: sharedVector.h:61
void swap(shared_ptr< T > &a, shared_ptr< T > &b) BOOST_NOEXCEPT
Definition: shared_ptr.hpp:783
size_t m_total
Total number of elements between m_offset and the end of data.
Definition: sharedVector.h:65
std::tr1::shared_ptr< E > m_sdata
Definition: sharedVector.h:59
template<typename E>
bool epics::pvData::detail::shared_vector_base< E >::unique ( ) const
inline

Data is not shared?

Definition at line 216 of file sharedVector.h.

216 {return !m_sdata || m_sdata.use_count()<=1;}
std::tr1::shared_ptr< E > m_sdata
Definition: sharedVector.h:59

Friends And Related Function Documentation

template<typename E>
template<typename E1 >
friend class shared_vector_base
friend

Definition at line 56 of file sharedVector.h.

Member Data Documentation

template<typename E>
size_t epics::pvData::detail::shared_vector_base< E >::m_count
protected

Number of visible elements between m_offset and end of data.

Definition at line 63 of file sharedVector.h.

template<typename E>
size_t epics::pvData::detail::shared_vector_base< E >::m_offset
protected

Offset in the data array of first visible element.

Definition at line 61 of file sharedVector.h.

template<typename E>
std::tr1::shared_ptr<E> epics::pvData::detail::shared_vector_base< E >::m_sdata
protected

Definition at line 59 of file sharedVector.h.

template<typename E>
size_t epics::pvData::detail::shared_vector_base< E >::m_total
protected

Total number of elements between m_offset and the end of data.

Definition at line 65 of file sharedVector.h.


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