30 #if defined(vxWorks) && !defined(_WRS_VXWORKS_MAJOR) 31 typedef class std::ios
std::ios_base;
34 namespace
epics {
namespace pvData {
142 virtual void postPut() = 0;
154 public std::tr1::enable_shared_from_this<PVField>
172 std::string getFullName()
const;
181 std::size_t getFieldOffset()
const;
188 std::size_t getNextFieldOffset()
const;
193 std::size_t getNumberFields()
const;
203 virtual void setImmutable();
224 void setPostHandler(PostHandlerPtr
const &postHandler);
236 virtual std::ostream& dumpValue(std::ostream& o)
const = 0;
239 void copyUnchecked(
const PVField& from);
246 return shared_from_this();
249 void setParentAndName(
PVStructure *parent, std::string
const & fieldName);
251 static void computeOffset(
const PVField *pvField);
252 static void computeOffset(
const PVField *pvField,std::size_t offset);
253 std::string fieldName;
257 size_t nextFieldOffset;
259 PostHandlerPtr postHandler;
308 virtual void getAs(
void *,
ScalarType)
const = 0;
311 virtual void getAs(
AnyScalar& v)
const =0;
329 virtual void putFrom(
const void *,
ScalarType) = 0;
336 virtual void assign(
const PVScalar&) = 0;
339 virtual void copyUnchecked(
const PVScalar& from) = 0;
361 void store(
const std::string& val) {
362 if (maxLength > 0 && val.length() > maxLength)
363 throw std::overflow_error(
"string too long");
391 virtual ~PVScalarValue();
406 virtual std::ostream& dumpValue(std::ostream& o)
const OVERRIDE;
411 virtual void operator>>=(T&
value)
const;
418 template<
typename T1>
420 T1
result(castUnsafe<T1,T>(
get()));
424 template<
typename T1>
426 put(castUnsafe<T,T1>(val));
431 PVScalar::putFrom(v);
436 virtual void copyUnchecked(
const PVScalar& from) OVERRIDE
FINAL;
459 castUnsafeV(1, typeCode, (
void*)&result, stype, src);
475 return o << static_cast<int>(
get());
481 return o << static_cast<unsigned int>(
get());
487 return o << std::boolalpha << static_cast<bool>(
get());
528 virtual std::ostream& dumpValue(std::ostream& o)
const OVERRIDE FINAL;
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;
599 using PVField::dumpValue;
600 virtual std::ostream& dumpValue(std::ostream& o, std::size_t index)
const = 0;
604 void checkLength(
size_t length)
const;
606 bool capacityMutable;
651 out = shared_vector_convert<const T>(temp);
683 throw std::invalid_argument(
"destination is immutable");
736 inline const PVFieldPtrArray &
getPVFields()
const {
return pvFields; }
746 return getSubFieldImpl(a,
false);
752 return getSubFieldImpl(a,
false);
765 template<
typename PVD,
typename A>
772 template<
typename PVD,
typename A>
788 return getSubFieldImpl(a,
true);
794 return getSubFieldImpl(a,
true);
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());
805 template<
typename PVD,
typename A>
809 std::tr1::shared_ptr<PVD> ret(std::tr1::dynamic_pointer_cast<PVD>(getSubFieldImpl(a,
true)));
811 throwBadFieldType(a);
815 template<
typename PVD,
typename A>
819 std::tr1::shared_ptr<const PVD> ret(std::tr1::dynamic_pointer_cast<const PVD>(getSubFieldImpl(a,
true)));
821 throwBadFieldType(a);
830 virtual void serialize(
837 virtual void deserialize(
867 virtual std::ostream& dumpValue(std::ostream& o)
const OVERRIDE FINAL;
872 void copyUnchecked(
const PVStructure& from,
const BitSet& maskBitSet,
bool inverse =
false);
917 inline PVFieldPtr getSubFieldImpl(
const std::string& name,
bool throws)
const {
918 return getSubFieldImpl(name.c_str(),
throws);
920 PVFieldPtr getSubFieldImpl(
const char *name,
bool throws)
const;
921 PVFieldPtr getSubFieldImpl(std::size_t fieldOffset,
bool throws)
const;
923 PVFieldPtrArray pvFields;
925 std::string extendsStructureName;
968 inline const PVFieldPtr&
get() {
return value; }
969 inline PVField::const_shared_pointer
get()
const {
return value; }
971 template<
typename PVT>
972 inline std::tr1::shared_ptr<PVT>
get() {
977 template<
typename PVT>
978 inline std::tr1::shared_ptr<const PVT>
get()
const {
991 template<
typename PVT>
1003 PVFieldPtr
select(std::string
const & fieldName);
1005 template<
typename PVT>
1006 inline std::tr1::shared_ptr<PVT>
select(std::string
const & fieldName) {
1020 std::string getSelectedFieldName()
const;
1028 inline void set(PVFieldPtr
const &
value) {
1029 set(selector,
value);
1040 void set(
int32 index, PVFieldPtr
const &
value);
1051 void set(std::string
const & fieldName, PVFieldPtr
const &
value);
1058 virtual void serialize(
1065 virtual void deserialize(
1073 virtual std::ostream& dumpValue(std::ostream& o)
const OVERRIDE FINAL;
1076 void copyUnchecked(
const PVUnion& from);
1079 static PVDataCreatePtr pvDataCreate;
1094 template<
typename T>
1104 template<
typename T,
class Base>
1113 typedef ::epics::pvData::shared_vector<T>
svector;
1118 template<
typename A>
1126 virtual const_svector view()
const = 0;
1138 virtual void swap(const_svector& other) = 0;
1143 virtual void replace(
const const_svector& next) = 0;
1159 return thaw(result);
1174 template<
typename T>
1184 typedef ::epics::pvData::shared_vector<T>
svector;
1193 virtual ~PVValueArray();
1200 virtual
std::ostream& dumpValue(
std::ostream& o) const
OVERRIDE FINAL;
1201 virtual
std::ostream& dumpValue(
std::ostream& o,
size_t index) const
OVERRIDE FINAL;
1211 virtual void replace(
const const_svector& next)
OVERRIDE FINAL;
1248 typedef ::epics::pvData::shared_vector<PVStructurePtr>
svector;
1284 std::size_t append(std::size_t number);
1291 bool remove(std::size_t offset,std::size_t number);
1300 checkLength(other.
size());
1312 virtual std::ostream& dumpValue(std::ostream& o)
const OVERRIDE FINAL;
1313 virtual std::ostream& dumpValue(std::ostream& o, std::size_t index)
const OVERRIDE FINAL;
1315 void copy(
const PVStructureArray& from);
1316 void copyUnchecked(
const PVStructureArray& from);
1322 const_svector
value;
1347 typedef ::epics::pvData::shared_vector<PVUnionPtr>
svector;
1383 std::size_t append(std::size_t number);
1390 bool remove(std::size_t offset,std::size_t number);
1398 virtual void replace(
const const_svector &other) OVERRIDE FINAL {
1399 checkLength(other.
size());
1411 virtual std::ostream& dumpValue(std::ostream& o)
const OVERRIDE
FINAL;
1412 virtual std::ostream& dumpValue(std::ostream& o, std::size_t index)
const OVERRIDE
FINAL;
1414 void copy(
const PVUnionArray& from);
1415 void copyUnchecked(
const PVUnionArray& from);
1421 const_svector
value;
1467 struct pvfield_factory;
1495 PVFieldPtr createPVField(PVFieldPtr
const & fieldToClone);
1507 PVScalarPtr createPVScalar(
ScalarType scalarType);
1514 PVScalarPtr createPVScalar(PVScalarPtr
const & scalarToClone);
1520 template<
typename PVT>
1538 PVStructurePtr createPVStructure(
1539 StringArray const & fieldNames,PVFieldPtrArray
const & pvFields);
1545 PVStructurePtr createPVStructure(PVStructurePtr
const & structToClone);
1558 PVUnionPtr createPVUnion(PVUnionPtr
const & unionToClone);
1563 PVUnionPtr createPVVariantUnion();
1576 PVScalarArrayPtr createPVScalarArray(
ScalarType elementType);
1583 PVScalarArrayPtr createPVScalarArray(PVScalarArrayPtr
const & scalarArrayToClone);
1589 template<
typename PVAT>
1610 return createPVStructureArray(fieldCreate->createStructureArray(structure));
1628 return createPVUnionArray(fieldCreate->createUnionArray(punion));
1634 PVUnionArrayPtr createPVVariantUnionArray();
FORCE_INLINE std::tr1::shared_ptr< PVField > getSubField(A a)
PVScalarValue< int32 > PVInt
std::vector< PVUnionPtr >::const_iterator PVUnionPtrArray_const__iterator
const std::string & getFieldName() const
void putFrom(typename detail::ScalarStorageOps< T1 >::arg_type val)
std::tr1::shared_ptr< PVUShortArray > PVUShortArrayPtr
void putFrom(const AnyScalar &v)
const PVFieldPtrArray & getPVFields() const
std::tr1::shared_ptr< PVByte > PVBytePtr
std::vector< PVFieldPtr >::const_iterator PVFieldPtrArray_const__iterator
std::ostream & operator<<(std::ostream &o, const epics::pvData::Field *ptr)
std::tr1::shared_ptr< PVT > select(int32 index)
shared_ptr_vector_deletor(const shared_vector &v)
virtual const_svector view() const OVERRIDE FINAL
Fetch a read-only view of the current array data.
PVScalar is the base class for each scalar field.
std::tr1::shared_ptr< PVInt > PVIntPtr
std::tr1::shared_ptr< PVIntArray > PVIntArrayPtr
Data class for a unionArray.
void copy(const PVScalarArray &from)
::epics::pvData::shared_vector< T > svector
std::tr1::shared_ptr< detail::SharedPut > put
PVValueArray< int16 > PVShortArray
std::tr1::shared_ptr< PVULong > PVULongPtr
virtual void putFrom(const void *src, ScalarType stype) OVERRIDE FINAL
Convert and assign.
An EPICS-specific replacement for ANSI C's assert.
int32 getSelectedIndex() const
PVValueArray< uint8 > PVUByteArray
std::vector< PVUnionArrayPtr > PVUnionArrayPtrArray
StructureArrayConstPtr getStructureArray() const
std::tr1::shared_ptr< PVBoolean > PVBooleanPtr
PVValueArray< uint16 > PVUShortArray
::epics::pvData::shared_vector< PVStructurePtr > svector
std::tr1::shared_ptr< PVShort > PVShortPtr
Base class for serialization.
std::tr1::shared_ptr< PVStructureArrayPtrArray > PVStructureArrayPtrArrayPtr
const UnionConstPtr & getUnion() const
const PVStructureArray & const_reference
const FieldConstPtr & getField() const
This class is implemented by code that calls setPostHander.
shared_ptr< T > static_pointer_cast(shared_ptr< U > const &r) BOOST_NOEXCEPT
std::tr1::shared_ptr< const Array > ArrayConstPtr
PVStructureArrayPtr createPVStructureArray(StructureConstPtr const &structure)
std::vector< PVFieldPtr >::iterator PVFieldPtrArray_iterator
std::vector< PVStructurePtr > PVStructurePtrArray
const PVStructurePtr * const_pointer
std::tr1::shared_ptr< PVBooleanArray > PVBooleanArrayPtr
virtual void replace(const const_svector &other) OVERRIDE FINAL
PVValueArray< double > PVDoubleArray
const PVScalar & const_reference
void store(const std::string &val)
TODO only here because of the Lockable.
std::tr1::shared_ptr< const Structure > StructureConstPtr
std::tr1::shared_ptr< PVD > getSubField(A a)
static size_t num_instances
void printRaw(std::ostream &strm, const PVStructure::Formatter &format, const PVStructure &cur)
::epics::pvData::shared_vector< const PVStructurePtr > const_svector
std::tr1::shared_ptr< const StructureArray > StructureArrayConstPtr
std::tr1::shared_ptr< PVUIntArray > PVUIntArrayPtr
const PVScalarArray & const_reference
Mark external symbols and entry points for shared libraries.
PVValueArray< PVStructurePtr > PVStructureArray
PVValueArray< int32 > PVIntArray
const std::string & arg_type
const PVStructure * getParent() const
Callback class for deserialization.
This is a singleton class for creating data instances.
PVField is the base class for each PVData field.
std::vector< PVStructurePtr >::const_iterator PVStructurePtrArray_const__iterator
PVScalarValue< uint32 > PVUInt
std::tr1::shared_ptr< PVLong > PVLongPtr
PVStructureArray & reference
PVValueArray< uint64 > PVULongArray
PVScalarValue< boolean > PVBoolean
std::tr1::shared_ptr< PVUByte > PVUBytePtr
std::tr1::shared_ptr< PVStringArray > PVStringArrayPtr
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.
virtual size_t getCapacity() const OVERRIDE FINAL
std::tr1::shared_ptr< const Scalar > ScalarConstPtr
const PVStructure & const_reference
std::tr1::shared_ptr< const PVD > getSubFieldT(A a) const
std::tr1::shared_ptr< PVDataCreate > PVDataCreatePtr
PVScalarValue< uint64 > PVULong
std::tr1::shared_ptr< PVUInt > PVUIntPtr
PVScalarValue(ScalarConstPtr const &scalar)
PVString is special case, since it implements SerializableArray.
PVValueArray< float > PVFloatArray
std::tr1::shared_ptr< PVUnion > PVUnionPtr
ScalarType type() const
Type code of contained value. Or (ScalarType)-1 is empty.
std::tr1::shared_ptr< PostHandler > PostHandlerPtr
void getAs(shared_vector< const T > &out) const
PVScalarArray & reference
PVStructurePtr value_type
std::tr1::shared_ptr< const Union > UnionConstPtr
#define POINTER_DEFINITIONS(clazz)
PVValueArray< int8 > PVByteArray
PVValueArray< boolean > PVBooleanArray
std::tr1::shared_ptr< PVShortArray > PVShortArrayPtr
#define STATIC_ASSERT(expr)
Declare a condition that should be true at compile-time.
std::tr1::shared_ptr< PVStructureArray > PVStructureArrayPtr
const PVUnionArray & const_reference
template class for all extensions of PVArray.
std::tr1::shared_ptr< PVAT > createPVScalarArray()
PVValueArray< uint32 > PVUIntArray
PVValueArray< PVUnionPtr > PVUnionArray
std::tr1::shared_ptr< std::vector< T > > shared_vector
Class for serializing bitSets.
Class for serializing arrays.
::epics::pvData::shared_vector< const T > const_svector
::epics::pvData::shared_vector< PVUnionPtr > svector
This class implements introspection object for Array.
Base class for a scalarArray.
This class implements a Bytebuffer that is like the java.nio.ByteBuffer.
std::tr1::shared_ptr< PVScalar > PVScalarPtr
virtual size_t getCapacity() const OVERRIDE FINAL
PVScalarValue< uint8 > PVUByte
std::tr1::shared_ptr< PVUnionArray > PVUnionArrayPtr
PVUnion has a single subfield.
std::tr1::shared_ptr< PVULongArray > PVULongArrayPtr
void putFrom(const AnyScalar &v)
std::vector< PVFieldPtr > PVFieldPtrArray
std::tr1::shared_ptr< PVFloat > PVFloatPtr
Data interface for a structure,.
FORCE_INLINE std::tr1::shared_ptr< const PVField > getSubFieldT(A a) const
std::tr1::shared_ptr< const Field > FieldConstPtr
std::tr1::shared_ptr< PVLongArray > PVLongArrayPtr
int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)
size_t size() const
Number of elements visible through this vector.
virtual size_t getLength() const OVERRIDE FINAL
void put(typename storage_t::arg_type v)
Common code for PV*Array.
void assign(const PVScalarArray &pv)
PVScalarValue< int64 > PVLong
std::tr1::shared_ptr< const ScalarArray > ScalarArrayConstPtr
std::tr1::shared_ptr< PVFloatArray > PVFloatArrayPtr
std::tr1::shared_ptr< PVStructure > PVStructurePtr
std::tr1::shared_ptr< PVT > createPVScalar()
std::tr1::shared_ptr< PVString > PVStringPtr
Data class for a structureArray.
FORCE_INLINE std::tr1::shared_ptr< PVField > getSubFieldT(A a)
std::vector< PVUnionPtr >::iterator PVUnionPtrArray_iterator
virtual size_t getCapacity() const OVERRIDE FINAL
const PVUnion & const_reference
epicsShareExtern void castUnsafeV(size_t count, ScalarType to, void *dest, ScalarType from, const void *src)
virtual ~PVVectorStorage()
virtual void getAs(AnyScalar &v) const OVERRIDE FINAL
std::tr1::shared_ptr< const PVD > getSubField(A a) const
FORCE_INLINE std::tr1::shared_ptr< const PVField > getSubField(A a) const
Class that holds the data for each possible scalar type.
std::vector< std::string > StringArray
std::tr1::shared_ptr< PVField > PVFieldPtr
virtual void replace(const const_svector &other) OVERRIDE FINAL
std::tr1::shared_ptr< FieldCreate > FieldCreatePtr
void putFrom(const shared_vector< const T > &inp)
PVValueArray< std::string > PVStringArray
virtual const_svector view() const OVERRIDE FINAL
Fetch a read-only view of the current array data.
virtual size_t getLength() const OVERRIDE FINAL
static const ScalarType typeCode
void swap(shared_ptr< T > &a, shared_ptr< T > &b) BOOST_NOEXCEPT
PVUnionArrayPtr createPVUnionArray(UnionConstPtr const &punion)
PVField::shared_pointer getPtrSelf()
Callback class for serialization.
shared_ptr< T > dynamic_pointer_cast(shared_ptr< U > const &r) BOOST_NOEXCEPT
virtual void getAs(void *result, ScalarType rtype) const OVERRIDE FINAL
::epics::pvData::shared_vector< T > svector
PVScalarValue< int16 > PVShort
PVValueArray< int64 > PVLongArray
virtual const_svector view() const OVERRIDE
Fetch a read-only view of the current array data.
virtual ArrayConstPtr getArray() const OVERRIDE FINAL
virtual ArrayConstPtr getArray() const OVERRIDE FINAL
Compiler specific declarations.
PVScalarValue< int8 > PVByte
std::tr1::shared_ptr< PVUByteArray > PVUByteArrayPtr
PVArray is the base class for all array types.
std::tr1::shared_ptr< PVByteArray > PVByteArrayPtr
PVStructure * getParent()
#define EPICS_NOT_COPYABLE(CLASS)
Disable implicit copyable.
std::tr1::shared_ptr< PVScalarArray > PVScalarArrayPtr
UnionArrayConstPtr getUnionArray() const
std::vector< PVStructurePtr >::iterator PVStructurePtrArray_iterator
void copyUnchecked(const PVScalarArray &from)
std::vector< PVUnionPtr > PVUnionPtrArray
std::tr1::shared_ptr< PVDoubleArray > PVDoubleArrayPtr
const PVUnionPtr * const_pointer
PVScalarValue< double > PVDouble
std::tr1::shared_ptr< PVUnionArrayPtrArray > PVUnionArrayPtrArrayPtr
virtual void _getAsVoid(shared_vector< const void > &) const =0
PVScalarValue< float > PVFloat
std::tr1::shared_ptr< PVD > getSubFieldT(A a)
std::tr1::shared_ptr< PVUShort > PVUShortPtr
FORCE_INLINE const PVDataCreatePtr & getPVDataCreate()
std::tr1::shared_ptr< PVDouble > PVDoublePtr
static const int32 UNDEFINED_INDEX
FORCE_INLINE Formatter stream() const
bool operator!=(const epics::pvData::shared_vector< A > &a, const epics::pvData::shared_vector< B > &b)
std::vector< PVStructureArrayPtr > PVStructureArrayPtrArray
std::tr1::shared_ptr< PVT > select(std::string const &fieldName)
PVScalarValue< uint16 > PVUShort
bool operator==(const epics::pvData::shared_vector< A > &a, const epics::pvData::shared_vector< B > &b)
::epics::pvData::shared_vector< const PVUnionPtr > const_svector
static const ScalarType typeCode
::epics::pvData::shared_vector< const T > const_svector
std::tr1::shared_ptr< const UnionArray > UnionArrayConstPtr