PVData C++ 8.0.9
Loading...
Searching...
No Matches
pvData.h
1/* pvData.h */
2/*
3 * Copyright information and license terms for this software can be
4 * found in the file LICENSE that is included with the distribution
5 */
9#ifndef PVDATA_H
10#define PVDATA_H
11
12#include <string>
13#include <map>
14#include <stdexcept>
15#include <algorithm>
16#include <iterator>
17#include <iostream>
18#include <iomanip>
19
20#include <epicsAssert.h>
21
22#include <pv/pvIntrospect.h>
23#include <pv/typeCast.h>
24#include <pv/anyscalar.h>
25#include <pv/sharedVector.h>
26
27#include <shareLib.h>
28#include <compilerDependencies.h>
29
30#if defined(vxWorks) && !defined(_WRS_VXWORKS_MAJOR)
31typedef class std::ios std::ios_base;
32#endif
33
34namespace epics { namespace pvData {
35
40
41class PostHandler;
42
43class PVField;
44class PVScalar;
45
46class PVScalarArray;
47
48class PVStructure;
49
50class PVUnion;
51
52
53
54template<typename T> class PVScalarValue;
55template<typename T> class PVValueArray;
56
57
61typedef std::tr1::shared_ptr<PostHandler> PostHandlerPtr;
62
66typedef std::tr1::shared_ptr<PVField> PVFieldPtr;
71typedef std::vector<PVFieldPtr>::iterator PVFieldPtrArray_iterator;
72typedef std::vector<PVFieldPtr>::const_iterator PVFieldPtrArray_const__iterator;
73
77typedef std::tr1::shared_ptr<PVScalar> PVScalarPtr;
78
82typedef std::tr1::shared_ptr<PVScalarArray> PVScalarArrayPtr;
83
87typedef std::tr1::shared_ptr<PVStructure> PVStructurePtr;
92typedef std::vector<PVStructurePtr>::iterator PVStructurePtrArray_iterator;
93typedef std::vector<PVStructurePtr>::const_iterator PVStructurePtrArray_const__iterator;
94
98
100typedef std::tr1::shared_ptr<PVStructureArray> PVStructureArrayPtr;
101typedef std::vector<PVStructureArrayPtr> PVStructureArrayPtrArray;
102typedef std::tr1::shared_ptr<PVStructureArrayPtrArray> PVStructureArrayPtrArrayPtr;
103
107typedef std::tr1::shared_ptr<PVUnion> PVUnionPtr;
112typedef std::vector<PVUnionPtr>::iterator PVUnionPtrArray_iterator;
113typedef std::vector<PVUnionPtr>::const_iterator PVUnionPtrArray_const__iterator;
114
118
120typedef std::tr1::shared_ptr<PVUnionArray> PVUnionArrayPtr;
121typedef std::vector<PVUnionArrayPtr> PVUnionArrayPtrArray;
122typedef std::tr1::shared_ptr<PVUnionArrayPtrArray> PVUnionArrayPtrArrayPtr;
123
124class PVDataCreate;
125typedef std::tr1::shared_ptr<PVDataCreate> PVDataCreatePtr;
126
131class epicsShareClass PostHandler
132{
133public:
134 POINTER_DEFINITIONS(PostHandler);
138 virtual ~PostHandler(){}
142 virtual void postPut() = 0;
143};
144
152class epicsShareClass PVField
153: virtual public Serializable,
154 public std::tr1::enable_shared_from_this<PVField>
155{
156public:
157 POINTER_DEFINITIONS(PVField);
161 virtual ~PVField();
166 inline const std::string& getFieldName() const {return fieldName;}
181 std::size_t getFieldOffset() const;
188 std::size_t getNextFieldOffset() const;
193 std::size_t getNumberFields() const;
198 inline bool isImmutable() const {return immutable;}
203 virtual void setImmutable();
208 inline const FieldConstPtr & getField() const {return field;}
213 inline PVStructure * getParent() {return parent;}
214 inline const PVStructure * getParent() const {return parent;}
218 void postPut() ;
224 void setPostHandler(PostHandlerPtr const &postHandler);
230 virtual bool equals(PVField &pv);
236 virtual std::ostream& dumpValue(std::ostream& o) const = 0;
237
238 void copy(const PVField& from);
239 void copyUnchecked(const PVField& from);
240
241 static size_t num_instances; // use atomic::get() or volatile* access
242 enum {isPVField=1};
243protected:
244 PVField::shared_pointer getPtrSelf()
245 {
246 return shared_from_this();
247 }
248 explicit PVField(FieldConstPtr field);
249 void setParentAndName(PVStructure *parent, std::string const & fieldName);
250private:
251 static void computeOffset(const PVField *pvField);
252 static void computeOffset(const PVField *pvField,std::size_t offset);
253 std::string fieldName;
254 PVStructure *parent;
255 const FieldConstPtr field;
256 size_t fieldOffset;
257 size_t nextFieldOffset;
258 bool immutable;
259 PostHandlerPtr postHandler;
260 friend class PVDataCreate;
261 friend class PVStructure;
262 EPICS_NOT_COPYABLE(PVField)
263};
264
265epicsShareExtern std::ostream& operator<<(std::ostream& o, const PVField& f);
266
272class epicsShareClass PVScalar : public PVField {
273 // friend our child class(s) so that it
274 // can call protected methods of other
275 // PVScalar instances.
276 template<typename E> friend class PVScalarValue;
277public:
278 POINTER_DEFINITIONS(PVScalar);
282 virtual ~PVScalar();
283 typedef PVScalar &reference;
284 typedef const PVScalar& const_reference;
289 const ScalarConstPtr getScalar() const ;
290
301 template<typename T>
302 inline T getAs() const {
303 T result;
304 this->getAs((void*)&result, (ScalarType)ScalarTypeID<T>::value);
305 return result;
306 }
307protected:
308 virtual void getAs(void *, ScalarType) const = 0;
309public:
310
311 virtual void getAs(AnyScalar& v) const =0;
312
323 template<typename T>
324 inline void putFrom(T val) {
325 this->putFrom((const void*)&val, (ScalarType)ScalarTypeID<T>::value);
326 }
327
329 virtual void putFrom(const void *, ScalarType) = 0;
330
331 inline void putFrom(const AnyScalar& v) {
332 if(v)
333 putFrom(v.unsafe(), v.type());
334 }
335
336 virtual void assign(const PVScalar&) = 0;
337
338 virtual void copy(const PVScalar& from) = 0;
339 virtual void copyUnchecked(const PVScalar& from) = 0;
340
341protected:
342 explicit PVScalar(ScalarConstPtr const & scalar);
343 EPICS_NOT_COPYABLE(PVScalar)
344};
345
346namespace detail {
347template<typename T>
348struct ScalarStorageOps {
349 T value;
350 typedef T arg_type;
351 inline void store(T v) {
352 value = v;
353 }
354 ScalarStorageOps() :value(0) {}
355};
356template<>
357struct ScalarStorageOps<std::string> {
358 std::string value;
359 size_t maxLength;
360 typedef const std::string& arg_type;
361 void store(const std::string& val) {
362 if (maxLength > 0 && val.length() > maxLength)
363 throw std::overflow_error("string too long");
364
365 value = val;
366 }
367
368 ScalarStorageOps(): value(), maxLength(0) {} // initialized in PVString::PVString
369};
370} // namespace detail
371
377template<typename T>
378class epicsShareClass PVScalarValue : public PVScalar {
379 typedef detail::ScalarStorageOps<T> storage_t;
380public:
381 POINTER_DEFINITIONS(PVScalarValue);
382 typedef T value_type;
383 typedef T* pointer;
384 typedef const T* const_pointer;
385
386 static const ScalarType typeCode;
387
391 virtual ~PVScalarValue();
396 typename storage_t::arg_type get() const { return storage.value; }
401 inline void put(typename storage_t::arg_type v) {
402 storage.store(v);
404 }
405
406 virtual std::ostream& dumpValue(std::ostream& o) const OVERRIDE;
407
408 // get operator
409 // double value; doubleField >>= value;
410 // NOTE: virtual is needed for MS C++ compiler to get this operator exported
411 virtual void operator>>=(T& value) const;
412
413 // put operator
414 // double value = 12.8; doubleField <<= value;
415 // NOTE: virtual is needed for MS C++ compiler to get this operator exported
416 virtual void operator<<=(typename storage_t::arg_type value);
417
418 template<typename T1>
419 inline T1 getAs() const {
420 T1 result(castUnsafe<T1,T>(get()));
421 return result;
422 }
423
424 template<typename T1>
425 inline void putFrom(typename detail::ScalarStorageOps<T1>::arg_type val) {
426 put(castUnsafe<T,T1>(val));
427 }
428
429 inline void putFrom(const AnyScalar& v) {
430 // the template form of putFrom() hides the base class AnyScalar overload
431 PVScalar::putFrom(v);
432 }
433
434 virtual void assign(const PVScalar& scalar) OVERRIDE FINAL;
435 virtual void copy(const PVScalar& from) OVERRIDE FINAL;
436 virtual void copyUnchecked(const PVScalar& from) OVERRIDE FINAL;
437
438 virtual void serialize(ByteBuffer *pbuffer,
439 SerializableControl *pflusher) const OVERRIDE;
440 virtual void deserialize(ByteBuffer *pbuffer,
441 DeserializableControl *pflusher) OVERRIDE FINAL;
442
443protected:
444 explicit PVScalarValue(ScalarConstPtr const & scalar)
445 : PVScalar(scalar), storage() {}
446 virtual void getAs(void * result, ScalarType rtype) const OVERRIDE FINAL
447 {
448 const T src = get();
449 castUnsafeV(1, rtype, result, typeCode, (const void*)&src);
450 }
451public:
452 virtual void getAs(AnyScalar& v) const OVERRIDE FINAL
453 {
454 v = get();
455 }
456 virtual void putFrom(const void *src, ScalarType stype) OVERRIDE FINAL
457 {
458 T result;
459 castUnsafeV(1, typeCode, (void*)&result, stype, src);
460 put(result);
461 }
462protected:
463
464 friend class PVDataCreate;
465 storage_t storage;
466 EPICS_NOT_COPYABLE(PVScalarValue)
467};
468
472template<> inline
474{
475 return o << static_cast<int>(get());
476}
477
478template<> inline
480{
481 return o << static_cast<unsigned int>(get());
482}
483
484template<> inline
486{
487 return o << std::boolalpha << static_cast<bool>(get());
488}
489
490/*
491 * typedefs for the various possible scalar types.
492 */
493typedef PVScalarValue<boolean> PVBoolean;
494typedef PVScalarValue<int8> PVByte;
495typedef PVScalarValue<int16> PVShort;
496typedef PVScalarValue<int32> PVInt;
497typedef PVScalarValue<int64> PVLong;
498typedef PVScalarValue<uint8> PVUByte;
499typedef PVScalarValue<uint16> PVUShort;
500typedef PVScalarValue<uint32> PVUInt;
501typedef PVScalarValue<uint64> PVULong;
502typedef PVScalarValue<float> PVFloat;
503typedef PVScalarValue<double> PVDouble;
504typedef std::tr1::shared_ptr<PVBoolean> PVBooleanPtr;
505typedef std::tr1::shared_ptr<PVByte> PVBytePtr;
506typedef std::tr1::shared_ptr<PVShort> PVShortPtr;
507typedef std::tr1::shared_ptr<PVInt> PVIntPtr;
508typedef std::tr1::shared_ptr<PVLong> PVLongPtr;
509typedef std::tr1::shared_ptr<PVUByte> PVUBytePtr;
510typedef std::tr1::shared_ptr<PVUShort> PVUShortPtr;
511typedef std::tr1::shared_ptr<PVUInt> PVUIntPtr;
512typedef std::tr1::shared_ptr<PVULong> PVULongPtr;
513typedef std::tr1::shared_ptr<PVFloat> PVFloatPtr;
514typedef std::tr1::shared_ptr<PVDouble> PVDoublePtr;
515
521class epicsShareClass PVString : public PVScalarValue<std::string>, SerializableArray {
522public:
526 virtual ~PVString() {}
527
528 virtual std::ostream& dumpValue(std::ostream& o) const OVERRIDE FINAL;
529
530 virtual void serialize(ByteBuffer *pbuffer,
531 SerializableControl *pflusher) const OVERRIDE FINAL;
532 virtual void serialize(ByteBuffer *pbuffer,
533 SerializableControl *pflusher, size_t offset, size_t count) const OVERRIDE FINAL;
534protected:
535 explicit PVString(ScalarConstPtr const & scalar);
536
537 friend class PVDataCreate;
538 EPICS_NOT_COPYABLE(PVString)
539};
540typedef std::tr1::shared_ptr<PVString> PVStringPtr;
541
542
551class epicsShareClass PVArray : public PVField, public SerializableArray {
552public:
553 POINTER_DEFINITIONS(PVArray);
557 virtual ~PVArray(){};
562 virtual ArrayConstPtr getArray() const = 0;
567 virtual void setImmutable() OVERRIDE;
572 virtual std::size_t getLength() const = 0;
577 virtual void setLength(std::size_t length) = 0;
582 virtual std::size_t getCapacity() const = 0;
587 bool isCapacityMutable() const;
592 void setCapacityMutable(bool isMutable);
597 virtual void setCapacity(std::size_t capacity) = 0;
598
599 using PVField::dumpValue;
600 virtual std::ostream& dumpValue(std::ostream& o, std::size_t index) const = 0;
601
602protected:
603 explicit PVArray(FieldConstPtr const & field);
604 void checkLength(size_t length) const;
605private:
606 bool capacityMutable;
607 friend class PVDataCreate;
608 EPICS_NOT_COPYABLE(PVArray)
609};
610
611epicsShareExtern std::ostream& operator<<(format::array_at_internal const& manip, const PVArray& array);
612
618class epicsShareClass PVScalarArray : public PVArray {
619public:
620 POINTER_DEFINITIONS(PVScalarArray);
624 virtual ~PVScalarArray();
625 typedef PVScalarArray &reference;
626 typedef const PVScalarArray& const_reference;
632
633protected:
634 virtual void _getAsVoid(shared_vector<const void>&) const = 0;
635 virtual void _putFromVoid(const shared_vector<const void>&) = 0;
636public:
637
645 template<typename T>
646 void
648 {
650 _getAsVoid(temp);
651 out = shared_vector_convert<const T>(temp);
652 }
653
665 template<typename T>
666 inline void putFrom(const shared_vector<const T>& inp)
667 {
668 shared_vector<const void> temp(static_shared_vector_cast<const void>(inp));
669 _putFromVoid(temp);
670 }
671
681 void assign(const PVScalarArray& pv) {
682 if (isImmutable())
683 throw std::invalid_argument("destination is immutable");
684 copyUnchecked(pv);
685 }
686
687 void copy(const PVScalarArray& from) {
688 assign(from);
689 }
690
691 void copyUnchecked(const PVScalarArray& from) {
692 if (this==&from)
693 return;
694 shared_vector<const void> temp;
695 from._getAsVoid(temp);
696 _putFromVoid(temp);
697 }
698
699protected:
700 explicit PVScalarArray(ScalarArrayConstPtr const & scalarArray);
701private:
702 friend class PVDataCreate;
703 EPICS_NOT_COPYABLE(PVScalarArray)
704};
705
706
712class epicsShareClass PVStructure : public PVField, public BitSetSerializable
713{
714public:
715 POINTER_DEFINITIONS(PVStructure);
719 virtual ~PVStructure();
720 typedef PVStructure & reference;
721 typedef const PVStructure & const_reference;
726 virtual void setImmutable() OVERRIDE FINAL;
731 inline const StructureConstPtr &getStructure() const { return structurePtr; }
736 inline const PVFieldPtrArray & getPVFields() const { return pvFields; }
737
743 template<typename A>
744 FORCE_INLINE std::tr1::shared_ptr<PVField> getSubField(A a)
745 {
746 return getSubFieldImpl(a, false);
747 }
748
749 template<typename A>
750 FORCE_INLINE std::tr1::shared_ptr<const PVField> getSubField(A a) const
751 {
752 return getSubFieldImpl(a, false);
753 }
754
765 template<typename PVD, typename A>
766 inline std::tr1::shared_ptr<PVD> getSubField(A a)
767 {
768 STATIC_ASSERT(PVD::isPVField); // only allow cast from PVField sub-class
769 return std::tr1::dynamic_pointer_cast<PVD>(getSubFieldImpl(a, false));
770 }
771
772 template<typename PVD, typename A>
773 inline std::tr1::shared_ptr<const PVD> getSubField(A a) const
774 {
775 STATIC_ASSERT(PVD::isPVField); // only allow cast from PVField sub-class
776 return std::tr1::dynamic_pointer_cast<const PVD>(getSubFieldImpl(a, false));
777 }
778
785 template<typename A>
786 FORCE_INLINE std::tr1::shared_ptr<PVField> getSubFieldT(A a)
787 {
788 return getSubFieldImpl(a, true);
789 }
790
791 template<typename A>
792 FORCE_INLINE std::tr1::shared_ptr<const PVField> getSubFieldT(A a) const
793 {
794 return getSubFieldImpl(a, true);
795 }
796
797private:
798 static void throwBadFieldType(const char *name);
799 static void throwBadFieldType(std::size_t fieldOffset);
800 static FORCE_INLINE void throwBadFieldType(const std::string& name) {
801 throwBadFieldType(name.c_str());
802 }
803public:
804
805 template<typename PVD, typename A>
806 inline std::tr1::shared_ptr<PVD> getSubFieldT(A a)
807 {
808 STATIC_ASSERT(PVD::isPVField); // only allow cast from PVField sub-class
809 std::tr1::shared_ptr<PVD> ret(std::tr1::dynamic_pointer_cast<PVD>(getSubFieldImpl(a, true)));
810 if(!ret)
811 throwBadFieldType(a);
812 return ret;
813 }
814
815 template<typename PVD, typename A>
816 inline std::tr1::shared_ptr<const PVD> getSubFieldT(A a) const
817 {
818 STATIC_ASSERT(PVD::isPVField); // only allow cast from PVField sub-class
819 std::tr1::shared_ptr<const PVD> ret(std::tr1::dynamic_pointer_cast<const PVD>(getSubFieldImpl(a, true)));
820 if(!ret)
821 throwBadFieldType(a);
822 return ret;
823 }
824
830 virtual void serialize(
831 ByteBuffer *pbuffer,SerializableControl *pflusher) const OVERRIDE FINAL;
837 virtual void deserialize(
838 ByteBuffer *pbuffer,DeserializableControl *pflusher) OVERRIDE FINAL;
845 virtual void serialize(ByteBuffer *pbuffer,
846 SerializableControl *pflusher,BitSet *pbitSet) const OVERRIDE FINAL;
853 virtual void deserialize(ByteBuffer *pbuffer,
854 DeserializableControl*pflusher,BitSet *pbitSet) OVERRIDE FINAL;
866
867 virtual std::ostream& dumpValue(std::ostream& o) const OVERRIDE FINAL;
868
869 void copy(const PVStructure& from);
870
871 void copyUnchecked(const PVStructure& from);
872 void copyUnchecked(const PVStructure& from, const BitSet& maskBitSet, bool inverse = false);
873
874 struct Formatter {
875 enum mode_t {
876 Auto,
877 Plain,
878 ANSI,
879 };
880 enum format_t {
881 Raw,
882 NT,
883 JSON,
884 };
885 private:
886 const PVStructure& xtop;
887 const BitSet* xshow;
888 const BitSet* xhighlight;
889 mode_t xmode;
890 format_t xfmt;
891 bool xarrAsStr;
892 public:
893 explicit Formatter(const PVStructure& top)
894 :xtop(top)
895 ,xshow(0)
896 ,xhighlight(0)
897 ,xmode(Auto)
898 ,xfmt(NT)
899 ,xarrAsStr(false)
900 {}
901
902 // those fields (and their parents) to be printed. non-NT mode.
903 FORCE_INLINE Formatter& show(const BitSet& set) { xshow = &set; return *this; }
904 // those fields (and not their parents) to be specially highlighted. non-NT mode.
905 FORCE_INLINE Formatter& highlight(const BitSet& set) { xhighlight = &set; return *this; }
906
907 FORCE_INLINE Formatter& mode(mode_t m) { xmode = m; return *this; }
908
909 FORCE_INLINE Formatter& format(format_t f) { xfmt = f; return *this; }
910
911 FORCE_INLINE Formatter& arrayAsString(bool b) { xarrAsStr = b; return *this; }
912
913 friend epicsShareFunc std::ostream& operator<<(std::ostream& strm, const Formatter& format);
914 friend void printRaw(std::ostream& strm, const PVStructure::Formatter& format, const PVStructure& cur);
915 };
916
917 FORCE_INLINE Formatter stream() const { return Formatter(*this); }
918
919private:
920
921 inline PVFieldPtr getSubFieldImpl(const std::string& name, bool throws) const {
922 return getSubFieldImpl(name.c_str(), throws);
923 }
924 PVFieldPtr getSubFieldImpl(const char *name, bool throws) const;
925 PVFieldPtr getSubFieldImpl(std::size_t fieldOffset, bool throws) const;
926
927 PVFieldPtrArray pvFields;
928 StructureConstPtr structurePtr;
929 std::string extendsStructureName;
930 friend class PVDataCreate;
931 EPICS_NOT_COPYABLE(PVStructure)
932};
933
934epicsShareFunc
935std::ostream& operator<<(std::ostream& strm, const PVStructure::Formatter& format);
936
944class epicsShareClass PVUnion : public PVField
945{
946public:
947 POINTER_DEFINITIONS(PVUnion);
951 virtual ~PVUnion();
952 typedef PVUnion & reference;
953 typedef const PVUnion & const_reference;
954
960 static const int32 UNDEFINED_INDEX;
961
966 inline const UnionConstPtr& getUnion() const { return unionPtr; }
967
972 inline const PVFieldPtr& get() { return value; }
973 inline PVField::const_shared_pointer get() const { return value; }
974
975 template<typename PVT>
976 inline std::tr1::shared_ptr<PVT> get() {
977 STATIC_ASSERT(PVT::isPVField); // only allow cast from PVField sub-class
978 return std::tr1::dynamic_pointer_cast<PVT>(get());
979 }
980
981 template<typename PVT>
982 inline std::tr1::shared_ptr<const PVT> get() const {
983 STATIC_ASSERT(PVT::isPVField); // only allow cast from PVField sub-class
984 return std::tr1::dynamic_pointer_cast<const PVT>(get());
985 }
986
994
995 template<typename PVT>
996 inline std::tr1::shared_ptr<PVT> select(int32 index) {
997 STATIC_ASSERT(PVT::isPVField); // only allow cast from PVField sub-class
998 return std::tr1::dynamic_pointer_cast<PVT>(select(index));
999 }
1000
1007 PVFieldPtr select(std::string const & fieldName);
1008
1009 template<typename PVT>
1010 inline std::tr1::shared_ptr<PVT> select(std::string const & fieldName) {
1011 return std::tr1::dynamic_pointer_cast<PVT>(select(fieldName));
1012 }
1013
1018 inline int32 getSelectedIndex() const { return selector; }
1019
1025
1032 inline void set(PVFieldPtr const & value) {
1033 set(selector, value);
1034 }
1035
1044 void set(int32 index, PVFieldPtr const & value);
1045
1055 void set(std::string const & fieldName, PVFieldPtr const & value);
1056
1062 virtual void serialize(
1063 ByteBuffer *pbuffer,SerializableControl *pflusher) const OVERRIDE FINAL;
1069 virtual void deserialize(
1070 ByteBuffer *pbuffer,DeserializableControl *pflusher) OVERRIDE FINAL;
1075 explicit PVUnion(UnionConstPtr const & punion);
1076
1077 virtual std::ostream& dumpValue(std::ostream& o) const OVERRIDE FINAL;
1078
1079 void copy(const PVUnion& from);
1080 void copyUnchecked(const PVUnion& from);
1081
1082private:
1083 static PVDataCreatePtr pvDataCreate;
1084
1085 friend class PVDataCreate;
1086 UnionConstPtr unionPtr; // same as PVField::getField()
1087
1088 int32 selector;
1089 PVFieldPtr value;
1090 bool variant;
1091 EPICS_NOT_COPYABLE(PVUnion)
1092};
1093
1094
1095namespace detail {
1096 // adaptor to allow epics::pvData::shared_vector to hold a reference
1097 // to a shared_ptr<std::vector<> >
1098 template<typename T>
1099 struct shared_ptr_vector_deletor {
1100 typedef std::tr1::shared_ptr<std::vector<T> > shared_vector;
1101 shared_vector vec;
1102 shared_ptr_vector_deletor(const shared_vector& v)
1103 :vec(v) {}
1104 void operator()(T*){vec.reset();}
1105 };
1106
1108 template<typename T, class Base>
1109 class PVVectorStorage : public Base
1110 {
1111 public:
1112 typedef T value_type;
1113 typedef T* pointer;
1114 typedef const T* const_pointer;
1115
1116 //TODO: full namespace can be removed along with local typedef 'shared_vector'
1117 typedef ::epics::pvData::shared_vector<T> svector;
1118 typedef ::epics::pvData::shared_vector<const T> const_svector;
1119
1120
1121 protected:
1122 template<typename A>
1123 explicit PVVectorStorage(A a) : Base(a) {}
1124 public:
1125 virtual ~PVVectorStorage(){}
1126
1127 // Primitive array manipulations
1128
1130 virtual const_svector view() const = 0;
1131
1142 virtual void swap(const_svector& other) = 0;
1143
1147 virtual void replace(const const_svector& next) = 0;
1148
1149 // Derived operations
1150
1159 inline svector reuse()
1160 {
1161 const_svector result;
1162 this->swap(result);
1163 return thaw(result);
1164 }
1165
1166 EPICS_NOT_COPYABLE(PVVectorStorage)
1167 };
1168} // namespace detail
1169
1178template<typename T>
1179class epicsShareClass PVValueArray : public detail::PVVectorStorage<T,PVScalarArray> {
1181public:
1182 POINTER_DEFINITIONS(PVValueArray);
1183 typedef T value_type;
1184 typedef T* pointer;
1185 typedef const T* const_pointer;
1186
1187 //TODO: full namespace can be removed along with local typedef 'shared_vector'
1188 typedef ::epics::pvData::shared_vector<T> svector;
1189 typedef ::epics::pvData::shared_vector<const T> const_svector;
1190
1191
1192 static const ScalarType typeCode;
1193
1197 virtual ~PVValueArray();
1198
1202 virtual ArrayConstPtr getArray() const OVERRIDE FINAL;
1203
1204 virtual std::ostream& dumpValue(std::ostream& o) const OVERRIDE FINAL;
1205 virtual std::ostream& dumpValue(std::ostream& o, size_t index) const OVERRIDE FINAL;
1206
1207 virtual size_t getLength() const OVERRIDE FINAL {return value.size();}
1208 virtual size_t getCapacity() const OVERRIDE FINAL {return value.capacity();}
1209
1210 virtual void setCapacity(size_t capacity) OVERRIDE FINAL;
1211 virtual void setLength(size_t length) OVERRIDE FINAL;
1212
1213 virtual const_svector view() const OVERRIDE FINAL {return value;}
1214 virtual void swap(const_svector &other) OVERRIDE FINAL;
1215 virtual void replace(const const_svector& next) OVERRIDE FINAL;
1216
1217 // from Serializable
1218 virtual void serialize(ByteBuffer *pbuffer,SerializableControl *pflusher) const OVERRIDE FINAL;
1219 virtual void deserialize(ByteBuffer *pbuffer,DeserializableControl *pflusher) OVERRIDE FINAL;
1220 virtual void serialize(ByteBuffer *pbuffer,
1221 SerializableControl *pflusher, size_t offset, size_t count) const OVERRIDE FINAL;
1222
1223protected:
1224 virtual void _getAsVoid(epics::pvData::shared_vector<const void>& out) const OVERRIDE FINAL;
1225 virtual void _putFromVoid(const epics::pvData::shared_vector<const void>& in) OVERRIDE FINAL;
1226
1227 explicit PVValueArray(ScalarArrayConstPtr const & scalar);
1228 const_svector value;
1229 friend class PVDataCreate;
1230 EPICS_NOT_COPYABLE(PVValueArray)
1231};
1232
1233
1239template<>
1240class epicsShareClass PVValueArray<PVStructurePtr> : public detail::PVVectorStorage<PVStructurePtr,PVArray>
1241{
1243public:
1244 POINTER_DEFINITIONS(PVStructureArray);
1245 typedef PVStructurePtr value_type;
1246 typedef PVStructurePtr* pointer;
1247 typedef const PVStructurePtr* const_pointer;
1248 typedef PVStructureArray &reference;
1249 typedef const PVStructureArray& const_reference;
1250
1251 //TODO: full namespace can be removed along with local typedef 'shared_vector'
1252 typedef ::epics::pvData::shared_vector<PVStructurePtr> svector;
1253 typedef ::epics::pvData::shared_vector<const PVStructurePtr> const_svector;
1257 virtual ~PVValueArray() {}
1258
1259 virtual ArrayConstPtr getArray() const OVERRIDE FINAL
1260 {
1261 return std::tr1::static_pointer_cast<const Array>(structureArray);
1262 }
1263
1264 virtual size_t getLength() const OVERRIDE FINAL {return value.size();}
1265 virtual size_t getCapacity() const OVERRIDE FINAL {return value.capacity();}
1266
1271 virtual void setCapacity(size_t capacity) OVERRIDE FINAL;
1276 virtual void setLength(std::size_t length) OVERRIDE FINAL;
1277
1282 StructureArrayConstPtr getStructureArray() const {return structureArray;}
1288 std::size_t append(std::size_t number);
1295 bool remove(std::size_t offset,std::size_t number);
1299 void compress();
1300
1301 virtual const_svector view() const OVERRIDE FINAL { return value; }
1302 virtual void swap(const_svector &other) OVERRIDE FINAL;
1303 virtual void replace(const const_svector &other) OVERRIDE FINAL {
1304 checkLength(other.size());
1305 value = other;
1307 }
1308
1309 virtual void serialize(ByteBuffer *pbuffer,
1310 SerializableControl *pflusher) const OVERRIDE FINAL;
1311 virtual void deserialize(ByteBuffer *buffer,
1312 DeserializableControl *pflusher) OVERRIDE FINAL;
1313 virtual void serialize(ByteBuffer *pbuffer,
1314 SerializableControl *pflusher, std::size_t offset, std::size_t count) const OVERRIDE FINAL;
1315
1316 virtual std::ostream& dumpValue(std::ostream& o) const OVERRIDE FINAL;
1317 virtual std::ostream& dumpValue(std::ostream& o, std::size_t index) const OVERRIDE FINAL;
1318
1319 void copy(const PVStructureArray& from);
1320 void copyUnchecked(const PVStructureArray& from);
1321
1322protected:
1323 PVValueArray(StructureArrayConstPtr const & structureArray);
1324private:
1325 StructureArrayConstPtr structureArray;
1326 const_svector value;
1327 friend class PVDataCreate;
1328 EPICS_NOT_COPYABLE(PVValueArray)
1329};
1330
1331
1332
1338template<>
1339class epicsShareClass PVValueArray<PVUnionPtr> : public detail::PVVectorStorage<PVUnionPtr,PVArray>
1340{
1342public:
1343 POINTER_DEFINITIONS(PVUnionArray);
1344 typedef PVUnionPtr value_type;
1345 typedef PVUnionPtr* pointer;
1346 typedef const PVUnionPtr* const_pointer;
1347 typedef PVUnionArray &reference;
1348 typedef const PVUnionArray& const_reference;
1349
1350 //TODO: full namespace can be removed along with local typedef 'shared_vector'
1351 typedef ::epics::pvData::shared_vector<PVUnionPtr> svector;
1352 typedef ::epics::pvData::shared_vector<const PVUnionPtr> const_svector;
1356 virtual ~PVValueArray() {}
1357
1358 virtual ArrayConstPtr getArray() const OVERRIDE FINAL
1359 {
1360 return std::tr1::static_pointer_cast<const Array>(unionArray);
1361 }
1362
1363 virtual size_t getLength() const OVERRIDE FINAL {return value.size();}
1364 virtual size_t getCapacity() const OVERRIDE FINAL {return value.capacity();}
1365
1370 virtual void setCapacity(size_t capacity) OVERRIDE FINAL;
1375 virtual void setLength(std::size_t length) OVERRIDE FINAL;
1376
1381 UnionArrayConstPtr getUnionArray() const {return unionArray;}
1387 std::size_t append(std::size_t number);
1394 bool remove(std::size_t offset,std::size_t number);
1398 void compress();
1399
1400 virtual const_svector view() const OVERRIDE { return value; }
1401 virtual void swap(const_svector &other) OVERRIDE;
1402 virtual void replace(const const_svector &other) OVERRIDE FINAL {
1403 checkLength(other.size());
1404 value = other;
1406 }
1407
1408 virtual void serialize(ByteBuffer *pbuffer,
1409 SerializableControl *pflusher) const OVERRIDE FINAL;
1410 virtual void deserialize(ByteBuffer *buffer,
1411 DeserializableControl *pflusher) OVERRIDE FINAL;
1412 virtual void serialize(ByteBuffer *pbuffer,
1413 SerializableControl *pflusher, std::size_t offset, std::size_t count) const OVERRIDE FINAL;
1414
1415 virtual std::ostream& dumpValue(std::ostream& o) const OVERRIDE FINAL;
1416 virtual std::ostream& dumpValue(std::ostream& o, std::size_t index) const OVERRIDE FINAL;
1417
1418 void copy(const PVUnionArray& from);
1419 void copyUnchecked(const PVUnionArray& from);
1420
1421protected:
1422 explicit PVValueArray(UnionArrayConstPtr const & unionArray);
1423private:
1424 UnionArrayConstPtr unionArray;
1425 const_svector value;
1426 friend class PVDataCreate;
1427 EPICS_NOT_COPYABLE(PVValueArray)
1428};
1429
1430
1435typedef std::tr1::shared_ptr<PVBooleanArray> PVBooleanArrayPtr;
1436
1437typedef PVValueArray<int8> PVByteArray;
1438typedef std::tr1::shared_ptr<PVByteArray> PVByteArrayPtr;
1439
1440typedef PVValueArray<int16> PVShortArray;
1441typedef std::tr1::shared_ptr<PVShortArray> PVShortArrayPtr;
1442
1443typedef PVValueArray<int32> PVIntArray;
1444typedef std::tr1::shared_ptr<PVIntArray> PVIntArrayPtr;
1445
1446typedef PVValueArray<int64> PVLongArray;
1447typedef std::tr1::shared_ptr<PVLongArray> PVLongArrayPtr;
1448
1449typedef PVValueArray<uint8> PVUByteArray;
1450typedef std::tr1::shared_ptr<PVUByteArray> PVUByteArrayPtr;
1451
1452typedef PVValueArray<uint16> PVUShortArray;
1453typedef std::tr1::shared_ptr<PVUShortArray> PVUShortArrayPtr;
1454
1455typedef PVValueArray<uint32> PVUIntArray;
1456typedef std::tr1::shared_ptr<PVUIntArray> PVUIntArrayPtr;
1457
1458typedef PVValueArray<uint64> PVULongArray;
1459typedef std::tr1::shared_ptr<PVULongArray> PVULongArrayPtr;
1460
1461typedef PVValueArray<float> PVFloatArray;
1462typedef std::tr1::shared_ptr<PVFloatArray> PVFloatArrayPtr;
1463
1464typedef PVValueArray<double> PVDoubleArray;
1465typedef std::tr1::shared_ptr<PVDoubleArray> PVDoubleArrayPtr;
1466
1467typedef PVValueArray<std::string> PVStringArray;
1468typedef std::tr1::shared_ptr<PVStringArray> PVStringArrayPtr;
1469
1470namespace detail {
1471struct pvfield_factory;
1472}
1473
1478class epicsShareClass PVDataCreate {
1479 friend struct detail::pvfield_factory;
1480public:
1485 static const PVDataCreatePtr &getPVDataCreate();
1486
1499 PVFieldPtr createPVField(PVFieldPtr const & fieldToClone);
1524 template<typename PVT>
1525 std::tr1::shared_ptr<PVT> createPVScalar()
1526 {
1527 return std::tr1::static_pointer_cast<PVT>(createPVScalar(PVT::typeCode));
1528 }
1529
1543 StringArray const & fieldNames,PVFieldPtrArray const & pvFields);
1550
1562 PVUnionPtr createPVUnion(PVUnionPtr const & unionToClone);
1568
1593 template<typename PVAT>
1594 std::tr1::shared_ptr<PVAT> createPVScalarArray()
1595 {
1596 return std::tr1::static_pointer_cast<PVAT>(createPVScalarArray(PVAT::typeCode));
1597 }
1598
1613 {
1614 return createPVStructureArray(fieldCreate->createStructureArray(structure));
1615 }
1616
1630 PVUnionArrayPtr createPVUnionArray(UnionConstPtr const & punion)
1631 {
1632 return createPVUnionArray(fieldCreate->createUnionArray(punion));
1633 }
1634
1638 PVUnionArrayPtr createPVVariantUnionArray();
1639
1640private:
1641 PVDataCreate();
1642 FieldCreatePtr fieldCreate;
1643 EPICS_NOT_COPYABLE(PVDataCreate)
1644};
1645
1652FORCE_INLINE const PVDataCreatePtr& getPVDataCreate() {
1654}
1655
1656bool epicsShareExtern operator==(const PVField&, const PVField&);
1657
1658static inline bool operator!=(const PVField& a, const PVField& b)
1659{return !(a==b);}
1660
1661}}
1662
1666namespace std{
1667 epicsShareExtern std::ostream& operator<<(std::ostream& o, const epics::pvData::PVField *ptr);
1668}
1669
1670#endif /* PVDATA_H */
strong_ordering operator(const error_code &__lhs, const error_code &__rhs) noexcept
basic_ostream< char > ostream
basic_ios< char > ios
constexpr _OI copy(_II __first, _II __last, _OI __result)
constexpr iterator_traits< _InputIterator >::difference_type count(_InputIterator __first, _InputIterator __last, const _Tp &__value)
basic_string< char > string
bool operator!=(const multimap< _Key, _Tp, _Compare, _Alloc > &__x, const multimap< _Key, _Tp, _Compare, _Alloc > &__y)
__rvalue_stream_insertion_t< _Ostream, _Tp > operator<<(_Ostream &&__os, const _Tp &__x)
basic_ostream< _CharT, _Traits > & operator<<(basic_ostream< _CharT, _Traits > &__os, const basic_string< _CharT, _Traits, _Alloc > &__str)
constexpr const _Tp && get(const pair< _Tp, _Up > &&__p) noexcept
constexpr bool operator==(const basic_string< _CharT, _Traits, _Alloc > &__lhs, const _CharT *__rhs)
size_type length() const noexcept
ScalarType type() const
Type code of contained value. Or (ScalarType)-1 is empty.
Definition anyscalar.h:158
A vector of bits.
Definition bitSet.h:56
Class for serializing bitSets.
Definition serialize.h:200
This class implements a Bytebuffer that is like the java.nio.ByteBuffer.
Definition byteBuffer.h:237
Callback class for deserialization.
Definition serialize.h:93
virtual ArrayConstPtr getArray() const =0
void setCapacityMutable(bool isMutable)
virtual std::size_t getCapacity() const =0
bool isCapacityMutable() const
virtual std::size_t getLength() const =0
virtual void setLength(std::size_t length)=0
virtual void setImmutable()
virtual void setCapacity(std::size_t capacity)=0
This is a singleton class for creating data instances.
Definition pvData.h:1478
PVUnionPtr createPVUnion(PVUnionPtr const &unionToClone)
PVUnionArrayPtr createPVUnionArray(UnionConstPtr const &punion)
Definition pvData.h:1630
PVStructureArrayPtr createPVStructureArray(StructureArrayConstPtr const &structureArray)
PVScalarArrayPtr createPVScalarArray(ScalarType elementType)
std::tr1::shared_ptr< PVAT > createPVScalarArray()
Definition pvData.h:1594
PVStructurePtr createPVStructure(StructureConstPtr const &structure)
std::tr1::shared_ptr< PVT > createPVScalar()
Definition pvData.h:1525
PVScalarArrayPtr createPVScalarArray(PVScalarArrayPtr const &scalarArrayToClone)
PVStructurePtr createPVStructure(PVStructurePtr const &structToClone)
PVScalarPtr createPVScalar(ScalarConstPtr const &scalar)
PVUnionArrayPtr createPVUnionArray(UnionArrayConstPtr const &unionArray)
PVStructurePtr createPVStructure(StringArray const &fieldNames, PVFieldPtrArray const &pvFields)
PVUnionPtr createPVUnion(UnionConstPtr const &punion)
PVScalarPtr createPVScalar(ScalarType scalarType)
static const PVDataCreatePtr & getPVDataCreate()
PVScalarArrayPtr createPVScalarArray(ScalarArrayConstPtr const &scalarArray)
PVFieldPtr createPVField(FieldConstPtr const &field)
PVStructureArrayPtr createPVStructureArray(StructureConstPtr const &structure)
Definition pvData.h:1612
PVScalarPtr createPVScalar(PVScalarPtr const &scalarToClone)
PVUnionPtr createPVVariantUnion()
PVUnionArrayPtr createPVVariantUnionArray()
PVFieldPtr createPVField(PVFieldPtr const &fieldToClone)
PVStructure * getParent()
Definition pvData.h:213
virtual void setImmutable()
std::size_t getFieldOffset() const
virtual bool equals(PVField &pv)
std::size_t getNextFieldOffset() const
const std::string & getFieldName() const
Definition pvData.h:166
virtual std::ostream & dumpValue(std::ostream &o) const =0
void setPostHandler(PostHandlerPtr const &postHandler)
std::size_t getNumberFields() const
const FieldConstPtr & getField() const
Definition pvData.h:208
std::string getFullName() const
bool isImmutable() const
Definition pvData.h:198
Base class for a scalarArray.
Definition pvData.h:618
void putFrom(const shared_vector< const T > &inp)
Definition pvData.h:666
void getAs(shared_vector< const T > &out) const
Definition pvData.h:647
void assign(const PVScalarArray &pv)
Definition pvData.h:681
const ScalarArrayConstPtr getScalarArray() const
PVScalar is the base class for each scalar field.
Definition pvData.h:272
const ScalarConstPtr getScalar() const
virtual void putFrom(const void *, ScalarType)=0
Convert and assign.
void putFrom(T val)
Definition pvData.h:324
Class that holds the data for each possible scalar type.
Definition pvData.h:378
virtual void putFrom(const void *src, ScalarType stype)
Convert and assign.
Definition pvData.h:456
virtual std::ostream & dumpValue(std::ostream &o) const
virtual void serialize(ByteBuffer *pbuffer, SerializableControl *pflusher) const
virtual void deserialize(ByteBuffer *pbuffer, DeserializableControl *pflusher)
storage_t::arg_type get() const
Definition pvData.h:396
void put(typename storage_t::arg_type v)
Definition pvData.h:401
virtual std::ostream & dumpValue(std::ostream &o) const
Some explicit specializations exist.
virtual void serialize(ByteBuffer *pbuffer, SerializableControl *pflusher) const
Data interface for a structure,.
Definition pvData.h:713
PVStructure(StructureConstPtr const &structure)
std::tr1::shared_ptr< PVField > getSubField(A a)
Definition pvData.h:744
std::tr1::shared_ptr< PVField > getSubFieldT(A a)
Definition pvData.h:786
virtual void setImmutable()
virtual void deserialize(ByteBuffer *pbuffer, DeserializableControl *pflusher, BitSet *pbitSet)
PVStructure(StructureConstPtr const &structure, PVFieldPtrArray const &pvFields)
virtual void deserialize(ByteBuffer *pbuffer, DeserializableControl *pflusher)
virtual std::ostream & dumpValue(std::ostream &o) const
virtual void serialize(ByteBuffer *pbuffer, SerializableControl *pflusher) const
virtual void serialize(ByteBuffer *pbuffer, SerializableControl *pflusher, BitSet *pbitSet) const
std::tr1::shared_ptr< PVD > getSubField(A a)
Definition pvData.h:766
const StructureConstPtr & getStructure() const
Definition pvData.h:731
const PVFieldPtrArray & getPVFields() const
Definition pvData.h:736
static const int32 UNDEFINED_INDEX
Definition pvData.h:960
void set(std::string const &fieldName, PVFieldPtr const &value)
int32 getSelectedIndex() const
Definition pvData.h:1018
PVFieldPtr select(std::string const &fieldName)
void set(PVFieldPtr const &value)
Definition pvData.h:1032
virtual void deserialize(ByteBuffer *pbuffer, DeserializableControl *pflusher)
PVFieldPtr select(int32 index)
virtual std::ostream & dumpValue(std::ostream &o) const
const UnionConstPtr & getUnion() const
Definition pvData.h:966
const PVFieldPtr & get()
Definition pvData.h:972
virtual void serialize(ByteBuffer *pbuffer, SerializableControl *pflusher) const
PVUnion(UnionConstPtr const &punion)
std::string getSelectedFieldName() const
void set(int32 index, PVFieldPtr const &value)
virtual void serialize(ByteBuffer *pbuffer, SerializableControl *pflusher, std::size_t offset, std::size_t count) const
virtual void setLength(std::size_t length)
virtual ArrayConstPtr getArray() const
Definition pvData.h:1259
virtual void serialize(ByteBuffer *pbuffer, SerializableControl *pflusher) const
virtual void deserialize(ByteBuffer *buffer, DeserializableControl *pflusher)
virtual void replace(const const_svector &other)
Definition pvData.h:1303
virtual std::ostream & dumpValue(std::ostream &o) const
bool remove(std::size_t offset, std::size_t number)
StructureArrayConstPtr getStructureArray() const
Definition pvData.h:1282
virtual void swap(const_svector &other)
virtual const_svector view() const
Fetch a read-only view of the current array data.
Definition pvData.h:1301
std::size_t append(std::size_t number)
virtual void setCapacity(size_t capacity)
virtual ArrayConstPtr getArray() const
Definition pvData.h:1358
std::size_t append(std::size_t number)
bool remove(std::size_t offset, std::size_t number)
virtual void deserialize(ByteBuffer *buffer, DeserializableControl *pflusher)
virtual void serialize(ByteBuffer *pbuffer, SerializableControl *pflusher, std::size_t offset, std::size_t count) const
virtual void setLength(std::size_t length)
virtual std::ostream & dumpValue(std::ostream &o) const
virtual void serialize(ByteBuffer *pbuffer, SerializableControl *pflusher) const
virtual void replace(const const_svector &other)
Definition pvData.h:1402
virtual size_t getCapacity() const
Definition pvData.h:1364
virtual const_svector view() const
Fetch a read-only view of the current array data.
Definition pvData.h:1400
UnionArrayConstPtr getUnionArray() const
Definition pvData.h:1381
virtual void swap(const_svector &other)
virtual void setCapacity(size_t capacity)
template class for all extensions of PVArray.
Definition pvData.h:1179
virtual ArrayConstPtr getArray() const
virtual const_svector view() const
Fetch a read-only view of the current array data.
Definition pvData.h:1213
virtual void deserialize(ByteBuffer *pbuffer, DeserializableControl *pflusher)
virtual std::ostream & dumpValue(std::ostream &o) const
virtual size_t getCapacity() const
Definition pvData.h:1208
virtual void replace(const const_svector &next)
virtual void serialize(ByteBuffer *pbuffer, SerializableControl *pflusher) const
virtual size_t getLength() const
Definition pvData.h:1207
virtual void swap(const_svector &other)
This class is implemented by code that calls setPostHander.
Definition pvData.h:132
virtual ~PostHandler()
Definition pvData.h:138
virtual void postPut()=0
Class for serializing arrays.
Definition serialize.h:229
Callback class for serialization.
Definition serialize.h:42
Base class for serialization.
Definition serialize.h:138
Common code for PV*Array.
Definition pvData.h:1110
virtual void replace(const const_svector &next)=0
virtual const_svector view() const =0
Fetch a read-only view of the current array data.
virtual void swap(const_svector &other)=0
A holder for a contiguous piece of memory.
const PVDataCreatePtr & getPVDataCreate()
Definition pvData.h:1652
std::tr1::shared_ptr< const Scalar > ScalarConstPtr
PVValueArray< PVStructurePtr > PVStructureArray
Definition pvData.h:99
std::tr1::shared_ptr< const Structure > StructureConstPtr
PVValueArray< boolean > PVBooleanArray
Definition pvData.h:1434
int32_t int32
Definition pvType.h:83
std::tr1::shared_ptr< PVField > PVFieldPtr
Definition pvData.h:66
std::tr1::shared_ptr< PVScalar > PVScalarPtr
Definition pvData.h:77
std::tr1::shared_ptr< const StructureArray > StructureArrayConstPtr
std::vector< std::string > StringArray
Definition pvType.h:110
std::vector< PVFieldPtr > PVFieldPtrArray
Definition pvData.h:70
std::tr1::shared_ptr< PVUnion > PVUnionPtr
Definition pvData.h:107
std::tr1::shared_ptr< const ScalarArray > ScalarArrayConstPtr
std::tr1::shared_ptr< PVStructure > PVStructurePtr
Definition pvData.h:87
std::tr1::shared_ptr< const Array > ArrayConstPtr
std::tr1::shared_ptr< const UnionArray > UnionArrayConstPtr
std::vector< PVUnionPtr > PVUnionPtrArray
Definition pvData.h:111
PVValueArray< PVUnionPtr > PVUnionArray
Definition pvData.h:119
std::vector< PVStructurePtr > PVStructurePtrArray
Definition pvData.h:91
std::tr1::shared_ptr< const Field > FieldConstPtr
std::tr1::shared_ptr< PVScalarArray > PVScalarArrayPtr
Definition pvData.h:82
std::tr1::shared_ptr< PostHandler > PostHandlerPtr
Definition pvData.h:61
void copy(PVValueArray< T > &pvFrom, size_t fromOffset, size_t fromStride, PVValueArray< T > &pvTo, size_t toOffset, size_t toStride, size_t count)
Copy a subarray from one scalar array to another.
std::tr1::shared_ptr< const Union > UnionConstPtr
epics
Definition convert.h:21