This is Unofficial EPICS BASE Doxygen Site
epics::pvData::PVValueArray< PVUnionPtr > Class Template Reference

Data class for a unionArray. More...

#include "pvData.h"

+ Inheritance diagram for epics::pvData::PVValueArray< PVUnionPtr >:
+ Collaboration diagram for epics::pvData::PVValueArray< PVUnionPtr >:

Public Types

typedef PVUnionPtr value_type
 
typedef PVUnionPtrpointer
 
typedef const PVUnionPtrconst_pointer
 
typedef PVUnionArrayreference
 
typedef const PVUnionArrayconst_reference
 
typedef ::epics::pvData::shared_vector< PVUnionPtrsvector
 
typedef ::epics::pvData::shared_vector< const PVUnionPtrconst_svector
 
- Public Types inherited from epics::pvData::detail::PVVectorStorage< PVUnionPtr, PVArray >
typedef PVUnionPtr value_type
 
typedef PVUnionPtrpointer
 
typedef const PVUnionPtrconst_pointer
 
typedef ::epics::pvData::shared_vector< PVUnionPtrsvector
 
typedef ::epics::pvData::shared_vector< const PVUnionPtrconst_svector
 
- Public Types inherited from epics::pvData::PVField
enum  { isPVField =1 }
 

Public Member Functions

 POINTER_DEFINITIONS (PVUnionArray)
 
virtual ~PVValueArray ()
 
virtual ArrayConstPtr getArray () const OVERRIDE FINAL
 
virtual size_t getLength () const OVERRIDE FINAL
 
virtual size_t getCapacity () const OVERRIDE FINAL
 
virtual void setCapacity (size_t capacity) OVERRIDE FINAL
 
virtual void setLength (std::size_t length) OVERRIDE FINAL
 
UnionArrayConstPtr getUnionArray () const
 
std::size_t append (std::size_t number)
 
bool remove (std::size_t offset, std::size_t number)
 
void compress ()
 
virtual const_svector view () const OVERRIDE
 Fetch a read-only view of the current array data. More...
 
virtual void swap (const_svector &other) OVERRIDE
 
virtual void replace (const const_svector &other) OVERRIDE FINAL
 
virtual void serialize (ByteBuffer *pbuffer, SerializableControl *pflusher) const OVERRIDE FINAL
 
virtual void deserialize (ByteBuffer *buffer, DeserializableControl *pflusher) OVERRIDE FINAL
 
virtual void serialize (ByteBuffer *pbuffer, SerializableControl *pflusher, std::size_t offset, std::size_t count) const OVERRIDE FINAL
 
virtual std::ostream & dumpValue (std::ostream &o) const OVERRIDE FINAL
 
virtual std::ostream & dumpValue (std::ostream &o, std::size_t index) const OVERRIDE FINAL
 
void copy (const PVUnionArray &from)
 
void copyUnchecked (const PVUnionArray &from)
 
- Public Member Functions inherited from epics::pvData::detail::PVVectorStorage< PVUnionPtr, PVArray >
virtual ~PVVectorStorage ()
 
svector reuse ()
 
- Public Member Functions inherited from epics::pvData::PVArray
 POINTER_DEFINITIONS (PVArray)
 
virtual ~PVArray ()
 
virtual void setImmutable () OVERRIDE
 
bool isCapacityMutable () const
 
void setCapacityMutable (bool isMutable)
 
virtual void setCapacity (std::size_t capacity)=0
 
- Public Member Functions inherited from epics::pvData::PVField
 POINTER_DEFINITIONS (PVField)
 
virtual ~PVField ()
 
const std::string & getFieldName () const
 
std::string getFullName () const
 
std::size_t getFieldOffset () const
 
std::size_t getNextFieldOffset () const
 
std::size_t getNumberFields () const
 
bool isImmutable () const
 
const FieldConstPtrgetField () const
 
PVStructuregetParent ()
 
const PVStructuregetParent () const
 
void postPut ()
 
void setPostHandler (PostHandlerPtr const &postHandler)
 
virtual bool equals (PVField &pv)
 
void copy (const PVField &from)
 
void copyUnchecked (const PVField &from)
 
- Public Member Functions inherited from epics::pvData::Serializable
virtual ~Serializable ()
 
- Public Member Functions inherited from epics::pvData::SerializableArray
virtual ~SerializableArray ()
 

Protected Member Functions

 PVValueArray (UnionArrayConstPtr const &unionArray)
 
- Protected Member Functions inherited from epics::pvData::detail::PVVectorStorage< PVUnionPtr, PVArray >
 PVVectorStorage (A a)
 
- Protected Member Functions inherited from epics::pvData::PVArray
 PVArray (FieldConstPtr const &field)
 
void checkLength (size_t length) const
 
- Protected Member Functions inherited from epics::pvData::PVField
PVField::shared_pointer getPtrSelf ()
 
 PVField (FieldConstPtr field)
 
void setParentAndName (PVStructure *parent, std::string const &fieldName)
 

Friends

class PVDataCreate
 

Additional Inherited Members

- Static Public Attributes inherited from epics::pvData::PVField
static size_t num_instances
 

Detailed Description

template<>
class epics::pvData::PVValueArray< PVUnionPtr >

Data class for a unionArray.

Definition at line 1335 of file pvData.h.

Member Typedef Documentation

Definition at line 1342 of file pvData.h.

Definition at line 1344 of file pvData.h.

Definition at line 1341 of file pvData.h.

Definition at line 1343 of file pvData.h.

Definition at line 1340 of file pvData.h.

Constructor & Destructor Documentation

virtual epics::pvData::PVValueArray< PVUnionPtr >::~PVValueArray ( )
inlinevirtual

Destructor

Definition at line 1352 of file pvData.h.

1352 {}
epics::pvData::PVValueArray< PVUnionPtr >::PVValueArray ( UnionArrayConstPtr const &  unionArray)
explicitprotected

Definition at line 203 of file PVDataCreateFactory.cpp.

Member Function Documentation

std::size_t epics::pvData::PVValueArray< PVUnionPtr >::append ( std::size_t  number)

Append new elements to the end of the array.

Parameters
numberThe number of elements to add.
Returns
the new length of the array.
void epics::pvData::PVUnionArray::compress ( )

Compress. This removes all null elements from the array.

Definition at line 69 of file PVUnionArray.cpp.

69  {
70  if (getArray()->getArraySizeType() == Array::fixed)
71  return;
72 
73  svector vec(reuse()); // TODO: check for first NULL before realloc
74 
75  size_t length = vec.size();
76  size_t newLength = 0;
77 
78  for(size_t i=0; i<length; i++) {
79  if(vec[i]) {
80  newLength++;
81  continue;
82  }
83  // find first non 0
84  size_t notNull = 0;
85  for(size_t j=i+1;j<length;j++) {
86  if(vec[j]) {
87  notNull = j;
88  break;
89  }
90  }
91  if(notNull!=0) {
92  vec[i] = vec[notNull];
93  vec[notNull].reset();
94  newLength++;
95  continue;
96  }
97  break;
98  }
99 
100  vec.resize(newLength);
101  const_svector cdata(freeze(vec));
102  swap(cdata);
103 }
int i
Definition: scan.c:967
virtual void swap(const_svector &other) OVERRIDE
::epics::pvData::shared_vector< PVUnionPtr > svector
Definition: pvData.h:1347
virtual ArrayConstPtr getArray() const OVERRIDE FINAL
Definition: pvData.h:1354
::epics::pvData::shared_vector< const PVUnionPtr > const_svector
Definition: pvData.h:1348
void epics::pvData::PVUnionArray::copy ( const PVUnionArray from)

Definition at line 242 of file PVUnionArray.cpp.

243 {
244  if(isImmutable())
245  throw std::invalid_argument("destination is immutable");
246 
247  if(*getUnionArray() != *from.getUnionArray())
248  throw std::invalid_argument("unionArray definitions do not match");
249 
250  copyUnchecked(from);
251 }
void copyUnchecked(const PVUnionArray &from)
bool isImmutable() const
Definition: pvData.h:198
UnionArrayConstPtr getUnionArray() const
Definition: pvData.h:1377
void epics::pvData::PVUnionArray::copyUnchecked ( const PVUnionArray from)

Definition at line 253 of file PVUnionArray.cpp.

254 {
255  if (this == &from)
256  return;
257 
258  replace(from.view());
259 }
virtual void replace(const const_svector &other) OVERRIDE FINAL
Definition: pvData.h:1398
void epics::pvData::PVUnionArray::deserialize ( ByteBuffer buffer,
DeserializableControl flusher 
)
virtual

Deserialize buffer.

Parameters
bufferserialization buffer.
flusherdeserialization control.

Implements epics::pvData::Serializable.

Definition at line 158 of file PVUnionArray.cpp.

159  {
160  svector data(reuse());
161 
162  size_t size = this->getArray()->getArraySizeType() == Array::fixed ?
163  this->getArray()->getMaximumCapacity() :
165 
166  data.resize(size);
167 
168  UnionConstPtr punion = unionArray->getUnion();
169 
170  PVDataCreatePtr pvDataCreate = getPVDataCreate();
171 
172  for(size_t i = 0; i<size; i++) {
173  pcontrol->ensureData(1);
174  size_t temp = pbuffer->getByte();
175  if(temp==0) {
176  data[i].reset();
177  }
178  else {
179  if(data[i].get()==NULL || !data[i].unique()) {
180  data[i] = pvDataCreate->createPVUnion(punion);
181  }
182  data[i]->deserialize(pbuffer, pcontrol);
183  }
184  }
185  replace(freeze(data)); // calls postPut()
186 }
int i
Definition: scan.c:967
#define NULL
Definition: catime.c:38
static std::size_t readSize(ByteBuffer *buffer, DeserializableControl *control)
std::tr1::shared_ptr< PVDataCreate > PVDataCreatePtr
Definition: pvData.h:124
std::tr1::shared_ptr< const Union > UnionConstPtr
Definition: pvIntrospect.h:170
::epics::pvData::shared_vector< PVUnionPtr > svector
Definition: pvData.h:1347
char * pbuffer
Definition: errlog.c:85
virtual void replace(const const_svector &other) OVERRIDE FINAL
Definition: pvData.h:1398
virtual ArrayConstPtr getArray() const OVERRIDE FINAL
Definition: pvData.h:1354
FORCE_INLINE const PVDataCreatePtr & getPVDataCreate()
Definition: pvData.h:1648
std::ostream & epics::pvData::PVUnionArray::dumpValue ( std::ostream &  o) const
virtual

Puts the PVField raw value to the stream.

Parameters
ooutput stream.
Returns
The output stream.

Implements epics::pvData::PVField.

Definition at line 214 of file PVUnionArray.cpp.

215 {
216  o << format::indent() << getUnionArray()->getID() << ' ' << getFieldName() << std::endl;
217  size_t length = getLength();
218  if (length > 0)
219  {
220  format::indent_scope s(o);
221 
222  for (size_t i = 0; i < length; i++)
223  dumpValue(o, i);
224  }
225 
226  return o;
227 }
const std::string & getFieldName() const
Definition: pvData.h:166
int i
Definition: scan.c:967
virtual std::ostream & dumpValue(std::ostream &o) const OVERRIDE FINAL
virtual size_t getLength() const OVERRIDE FINAL
Definition: pvData.h:1359
UnionArrayConstPtr getUnionArray() const
Definition: pvData.h:1377
std::ostream & epics::pvData::PVUnionArray::dumpValue ( std::ostream &  o,
std::size_t  index 
) const
virtual

Implements epics::pvData::PVArray.

Definition at line 229 of file PVUnionArray.cpp.

230 {
231  const_svector temp(view());
232  if (index<temp.size())
233  {
234  if (temp[index])
235  o << *temp[index];
236  else
237  o << format::indent() << "(none)" << std::endl;
238  }
239  return o;
240 }
virtual const_svector view() const OVERRIDE
Fetch a read-only view of the current array data.
Definition: pvData.h:1396
::epics::pvData::shared_vector< const PVUnionPtr > const_svector
Definition: pvData.h:1348
virtual ArrayConstPtr epics::pvData::PVValueArray< PVUnionPtr >::getArray ( ) const
inlinevirtual

Get the introspection interface

Returns
The interface.

Implements epics::pvData::PVArray.

Definition at line 1354 of file pvData.h.

1355  {
1356  return std::tr1::static_pointer_cast<const Array>(unionArray);
1357  }
shared_ptr< T > static_pointer_cast(shared_ptr< U > const &r) BOOST_NOEXCEPT
Definition: shared_ptr.hpp:788
virtual size_t epics::pvData::PVValueArray< PVUnionPtr >::getCapacity ( ) const
inlinevirtual

Get the array capacity.

Returns
The capacity.

Implements epics::pvData::PVArray.

Definition at line 1360 of file pvData.h.

1360 {return value.capacity();}
Definition: link.h:174
virtual size_t epics::pvData::PVValueArray< PVUnionPtr >::getLength ( ) const
inlinevirtual

Get the array length.

Returns
The length.

Implements epics::pvData::PVArray.

Definition at line 1359 of file pvData.h.

1359 {return value.size();}
Definition: link.h:174
UnionArrayConstPtr epics::pvData::PVValueArray< PVUnionPtr >::getUnionArray ( ) const
inline

Get the introspection interface

Returns
The interface.

Definition at line 1377 of file pvData.h.

epics::pvData::PVValueArray< PVUnionPtr >::POINTER_DEFINITIONS ( PVUnionArray  )
bool epics::pvData::PVValueArray< PVUnionPtr >::remove ( std::size_t  offset,
std::size_t  number 
)

Remove elements from the array.

Parameters
offsetThe offset of the first element to remove.
numberThe number of elements to remove.
Returns
(false,true) if the elements were removed.
virtual void epics::pvData::PVValueArray< PVUnionPtr >::replace ( const const_svector next)
inlinevirtual

Discard current contents and replaced with the provided. Fails for Immutable arrays calls postPut()

Implements epics::pvData::detail::PVVectorStorage< PVUnionPtr, PVArray >.

Definition at line 1398 of file pvData.h.

1398  {
1399  checkLength(other.size());
1400  value = other;
1401  PVField::postPut();
1402  }
Definition: link.h:174
void checkLength(size_t length) const
void epics::pvData::PVUnionArray::serialize ( ByteBuffer buffer,
SerializableControl flusher 
) const
virtual

Serialize field into given buffer.

Parameters
bufferserialization buffer.
flusherflush interface.

Implements epics::pvData::Serializable.

Definition at line 153 of file PVUnionArray.cpp.

154  {
155  serialize(pbuffer, pflusher, 0, getLength());
156 }
virtual void serialize(ByteBuffer *pbuffer, SerializableControl *pflusher) const OVERRIDE FINAL
virtual size_t getLength() const OVERRIDE FINAL
Definition: pvData.h:1359
char * pbuffer
Definition: errlog.c:85
virtual void epics::pvData::PVValueArray< PVUnionPtr >::serialize ( ByteBuffer buffer,
SerializableControl flusher,
std::size_t  offset,
std::size_t  count 
) const
virtual

Serialize field into given buffer.

Parameters
bufferserialization buffer.
flusherflush interface.
offsetoffset in elements.
countnumber of elements

Implements epics::pvData::SerializableArray.

void epics::pvData::PVUnionArray::setCapacity ( size_t  capacity)
virtual

Set the array capacity.

Parameters
capacityThe length.

Definition at line 105 of file PVUnionArray.cpp.

106 {
107  if(this->isCapacityMutable()) {
108  checkLength(capacity);
110  swap(value);
111  if(value.capacity()<capacity) {
112  svector mvalue(thaw(value));
113  mvalue.reserve(capacity);
114  value = freeze(mvalue);
115  }
116  swap(value);
117  }
118  else
119  THROW_EXCEPTION2(std::logic_error, "capacity immutable");
120 }
Definition: link.h:174
#define THROW_EXCEPTION2(TYPE, MSG)
void checkLength(size_t length) const
virtual void swap(const_svector &other) OVERRIDE
::epics::pvData::shared_vector< PVUnionPtr > svector
Definition: pvData.h:1347
bool isCapacityMutable() const
Definition: PVArray.cpp:33
::epics::pvData::shared_vector< const PVUnionPtr > const_svector
Definition: pvData.h:1348
virtual void epics::pvData::PVValueArray< PVUnionPtr >::setLength ( std::size_t  length)
virtual

Set the array length.

Parameters
lengthThe length.

Implements epics::pvData::PVArray.

void epics::pvData::PVUnionArray::swap ( const_svector other)
virtual

Exchange our contents for the provided.

Exceptions
std::logic_errorfor Immutable arrays.

Callers must ensure that postPut() is called after the last swap() operation.

Before you call this directly, consider using the reuse(), or replace() methods.

Implements epics::pvData::detail::PVVectorStorage< PVUnionPtr, PVArray >.

Definition at line 143 of file PVUnionArray.cpp.

144 {
145  if(this->isImmutable())
146  THROW_EXCEPTION2(std::logic_error,"Immutable");
147 
148  // no checkLength call here
149 
150  value.swap(other);
151 }
Definition: link.h:174
#define THROW_EXCEPTION2(TYPE, MSG)
bool isImmutable() const
Definition: pvData.h:198
virtual const_svector epics::pvData::PVValueArray< PVUnionPtr >::view ( ) const
inlinevirtual

Fetch a read-only view of the current array data.

Implements epics::pvData::detail::PVVectorStorage< PVUnionPtr, PVArray >.

Definition at line 1396 of file pvData.h.

1396 { return value; }
Definition: link.h:174

Friends And Related Function Documentation

friend class PVDataCreate
friend

Definition at line 1422 of file pvData.h.


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