merge branch release/4.0

This commit is contained in:
Marty Kraimer
2014-12-11 14:11:54 -05:00
41 changed files with 2712 additions and 1058 deletions
+17 -31
View File
@@ -55,7 +55,13 @@ static inline bool operator!=(const BoundedString& a, const BoundedString& b)
{return !(a==b);}
class Convert;
typedef std::tr1::shared_ptr<Convert> ConvertPtr;
/**
* @brief Conversion and Copy facility for pvData.
*
* Convert between numeric types, convert any field to a string,
* or convert from a string to a scalar field.
* <p>Numeric conversions are between scalar numeric types or between arrays of
@@ -74,16 +80,12 @@ static inline bool operator!=(const BoundedString& a, const BoundedString& b)
* A scalar field is a numeric field or pvBoolean or pvString.</p>
* <p>All from methods put data into a PVField, e.g. from means where the PVField gets it's data.</p>
*/
class Convert;
typedef std::tr1::shared_ptr<Convert> ConvertPtr;
class epicsShareClass Convert {
public:
static ConvertPtr getConvert();
/**
* Get the full fieldName for the pvField.
* @param builder The builder that will have the result.
* @param buf The string that will have the result.
* @param pvField The pvField.
*/
void getFullName(std::string *buf,PVFieldPtr const & pvField)
@@ -94,8 +96,8 @@ public:
/**
* Do fields have the same definition.
*
* @param First field
* @param Second field
* @param a First field
* @param b Second field
* @return (false, true) if the fields (are not, are) the same.
*/
inline bool equals(PVFieldPtr const &a,PVFieldPtr const &b)
@@ -106,8 +108,8 @@ public:
/**
* Do fields have the same definition.
*
* @param First field
* @param Second field
* @param a First field
* @param b Second field
* @return (false, true) if the fields (are not, are) the same.
*/
inline bool equals(PVField &a,PVField &b)
@@ -117,42 +119,26 @@ public:
/**
* Convert a PVField to a string.
* @param buf buffer for the result
* @param pv a PVField to convert to a string.
* If a PVField is a structure or array be prepared for a very long string.
* @param indentLevel indentation level
*/
inline void getString(std::string *buf,PVFieldPtr const & pvField,int indentLevel)
{getString(buf, pvField.get(), indentLevel);}
/**
* Convert a PVField to a string.
* param buf buffer for the result
* @param pv The PVField to convert to a string.
* If the PVField is a structure or array be prepared for a very long string.
* @param buf string that will hold pvField converted to a string,
* @param pvField The PVField to convert to a string.
*/
inline void getString(std::string * buf,PVFieldPtr const & pvField)
{getString(buf, pvField.get(), 0);}
/**
* Convert a PVField to a string.
* @param buf buffer for the result
* @param pv a PVField to convert to a string.
* If a PVField is a structure or array be prepared for a very long string.
* @param buf string that will hold pvField converted to a string,
* @param pvField The PVField to convert to a string.
* @param indentLevel indentation level
*/
void getString(std::string * buf,PVField const * pvField,int indentLevel);
/**
* Convert a PVField to a string.
* param buf buffer for the result
* @param pv The PVField to convert to a string.
* If the PVField is a structure or array be prepared for a very long string.
*/
inline void getString(std::string * buf,PVField const * pvField)
{getString(buf, pvField, 0);}
/**
* Convert from an array of std::string to a PVScalar
* Convert from an array of std::string to a PVStructure
* @param pv The PV.
* @param from The array of std::string value to convert and put into a PV.
* @param fromStartIndex The first element if the array of strings.
* @return The total number of fields that have been changed.
* @throws std::logic_error if the array of std::string does not have a valid values.
*/
std::size_t fromString(
+64 -29
View File
@@ -122,7 +122,8 @@ class PVDataCreate;
typedef std::tr1::shared_ptr<PVDataCreate> PVDataCreatePtr;
/**
* This class is implemented by code that calls setPostHander
* @brief This class is implemented by code that calls setPostHander
*
*/
class epicsShareClass PostHandler
{
@@ -139,7 +140,8 @@ public:
};
/**
* PVField is the base class for each PVData field.
* @brief PVField is the base class for each PVData field.
*
* Each PVData field has an interface that extends PVField.
*/
class epicsShareClass PVField
@@ -256,7 +258,8 @@ private:
epicsShareExtern std::ostream& operator<<(std::ostream& o, const PVField& f);
/**
* PVScalar is the base class for each scalar field.
* @brief PVScalar is the base class for each scalar field.
*
*/
class epicsShareClass PVScalar : public PVField {
// friend our child class(s) so that it
@@ -322,7 +325,8 @@ protected:
};
/**
* Class that holds the data for each posssible scalar type.
* @brief Class that holds the data for each posssible scalar type.
*
*/
template<typename T>
class epicsShareClass PVScalarValue : public PVScalar {
@@ -437,7 +441,8 @@ typedef std::tr1::shared_ptr<PVFloat> PVFloatPtr;
typedef std::tr1::shared_ptr<PVDouble> PVDoublePtr;
/**
* PVString is special case, since it implements SerializableArray
* @brief PVString is special case, since it implements SerializableArray
*
*/
class epicsShareClass PVString : public PVScalarValue<std::string>, SerializableArray {
public:
@@ -453,7 +458,11 @@ typedef std::tr1::shared_ptr<PVString> PVStringPtr;
/**
* PVArray is the base class for all array types, i.e. the scalarArray types and structureArray.
* @brief PVArray is the base class for all array types.
*
* The array types are unionArray, strucrtureArray and scalarArray.
* There is a scalarArray type for each scalarType.
*
*/
class epicsShareClass PVArray : public PVField, public SerializableArray {
public:
@@ -520,9 +529,9 @@ private:
epicsShareExtern std::ostream& operator<<(format::array_at_internal const& manip, const PVArray& array);
/**
* Base class for a scalarArray.
* @brief Base class for a scalarArray.
*
*/
class epicsShareClass PVScalarArray : public PVArray {
public:
@@ -604,6 +613,10 @@ private:
};
/**
* @brief Data interface for a structure,
*
*/
class epicsShareClass PVStructure : public PVField, public BitSetSerializable
{
public:
@@ -665,84 +678,84 @@ public:
/**
* Get a boolean field with the specified name.
* No longer needed. Use templete version of getSubField
* @deprecated No longer needed. Use templete version of getSubField
* @param fieldName The name of the field to get.
* @return Pointer to the field of null if a field with that name and type does not exist.
*/
PVBooleanPtr getBooleanField(std::string const &fieldName) ;
/**
* Get a byte field with the specified name.
* No longer needed. Use templete version of getSubField
* @deprecated No longer needed. Use templete version of getSubField
* @param fieldName The name of the field to get.
* @return Pointer to the field of null if a field with that name and type does not exist.
*/
PVBytePtr getByteField(std::string const &fieldName) ;
/**
* Get a short field with the specified name.
* No longer needed. Use templete version of getSubField
* @deprecated No longer needed. Use templete version of getSubField
* @param fieldName The name of the field to get.
* @return Pointer to the field of null if a field with that name and type does not exist.
*/
PVShortPtr getShortField(std::string const &fieldName) ;
/**
* Get a int field with the specified name.
* No longer needed. Use templete version of getSubField
* @deprecated No longer needed. Use templete version of getSubField
* @param fieldName The name of the field to get.
* @return Pointer to the field of null if a field with that name and type does not exist.
*/
PVIntPtr getIntField(std::string const &fieldName) ;
/**
* Get a long field with the specified name.
* No longer needed. Use templete version of getSubField
* @deprecated No longer needed. Use templete version of getSubField
* @param fieldName The name of the field to get.
* @return Pointer to the field of null if a field with that name and type does not exist.
*/
PVLongPtr getLongField(std::string const &fieldName) ;
/**
* Get an unsigned byte field with the specified name.
* No longer needed. Use templete version of getSubField
* @deprecated No longer needed. Use templete version of getSubField
* @param fieldName The name of the field to get.
* @return Pointer to the field of null if a field with that name and type does not exist.
*/
PVUBytePtr getUByteField(std::string const &fieldName) ;
/**
* Get an unsigned short field with the specified name.
* No longer needed. Use templete version of getSubField
* @deprecated No longer needed. Use templete version of getSubField
* @param fieldName The name of the field to get.
* @return Pointer to the field of null if a field with that name and type does not exist.
*/
PVUShortPtr getUShortField(std::string const &fieldName) ;
/**
* Get an unsigned int field with the specified name.
* No longer needed. Use templete version of getSubField
* @deprecated No longer needed. Use templete version of getSubField
* @param fieldName The name of the field to get.
* @return Pointer to the field of null if a field with that name and type does not exist.
*/
PVUIntPtr getUIntField(std::string const &fieldName) ;
/**
* Get an unsigned long field with the specified name.
* No longer needed. Use templete version of getSubField
* @deprecated No longer needed. Use templete version of getSubField
* @param fieldName The name of the field to get.
* @return Pointer to the field of null if a field with that name and type does not exist.
*/
PVULongPtr getULongField(std::string const &fieldName) ;
/**
* Get a float field with the specified name.
* No longer needed. Use templete version of getSubField
* @deprecated No longer needed. Use templete version of getSubField
* @param fieldName The name of the field to get.
* @return Pointer to the field of null if a field with that name and type does not exist.
*/
PVFloatPtr getFloatField(std::string const &fieldName) ;
/**
* Get a double field with the specified name.
* No longer needed. Use templete version of getSubField
* @deprecated No longer needed. Use templete version of getSubField
* @param fieldName The name of the field to get.
* @return Pointer to the field of null if a field with that name and type does not exist.
*/
PVDoublePtr getDoubleField(std::string const &fieldName) ;
/**
* Get a string field with the specified name.
* No longer needed. Use templete version of getSubField
* @deprecated No longer needed. Use templete version of getSubField
* @param fieldName The name of the field to get.
* @return Pointer to the field of null if a field with that name and type does not exist.
*/
@@ -750,21 +763,21 @@ public:
/**
* Get a structure field with the specified name.
* No longer needed. Use templete version of getSubField
* @deprecated No longer needed. Use templete version of getSubField
* @param fieldName The name of the field to get.
* @return Pointer to the field of null if a field with that name and type does not exist.
*/
PVStructurePtr getStructureField(std::string const &fieldName) ;
/**
* Get a union field with the specified name.
* No longer needed. Use templete version of getSubField
* @deprecated No longer needed. Use templete version of getSubField
* @param fieldName The name of the field to get.
* @return Pointer to the field of null if a field with that name and type does not exist.
*/
PVUnionPtr getUnionField(std::string const &fieldName) ;
/**
* Get a scalarArray field with the specified name.
* No longer needed. Use templete version of getSubField
* @deprecated No longer needed. Use templete version of getSubField
* @param fieldName The name of the field to get.
* @param elementType The element type.
* @return Pointer to the field of null if a field with that name and type does not exist.
@@ -773,14 +786,14 @@ public:
std::string const &fieldName,ScalarType elementType) ;
/**
* Get a structureArray field with the specified name.
* No longer needed. Use templete version of getSubField
* @deprecated No longer needed. Use templete version of getSubField
* @param fieldName The name of the field to get.
* @return Pointer to the field of null if a field with that name and type does not exist.
*/
PVStructureArrayPtr getStructureArrayField(std::string const &fieldName) ;
/**
* Get a unionArray field with the specified name.
* No longer needed. Use templete version of getSubField
* @deprecated No longer needed. Use templete version of getSubField
* @param fieldName The name of the field to get.
* @return Pointer to the field of null if a field with that name and type does not exist.
*/
@@ -857,7 +870,10 @@ private:
/**
* PVUnion has a single subfield which has a type specified by a union introspection interface.
* @brief PVUnion has a single subfield.
*
* The type for the subfield is specified by a union introspection interface.
*
*/
class epicsShareClass PVUnion : public PVField
{
@@ -1064,6 +1080,13 @@ namespace detail {
};
} // namespace detail
/**
* @brief template class for all extensions of PVArray.
*
* The direct extensions are pvBooleanArray, pvByteArray, ..., pvStringArray.
* There are specializations for PVStringArray, PVStructureArray, and PVUnionArray.
*
*/
template<typename T>
class epicsShareClass PVValueArray : public detail::PVVectorStorage<T,PVScalarArray> {
typedef detail::PVVectorStorage<T,PVScalarArray> base_t;
@@ -1085,6 +1108,9 @@ public:
*/
virtual ~PVValueArray() {}
/**
* Get introspection interface.
*/
virtual ArrayConstPtr getArray() const
{
return std::tr1::static_pointer_cast<const Array>(this->getField());
@@ -1129,7 +1155,8 @@ protected:
/**
* Data class for a structureArray
* @brief Data class for a structureArray
*
*/
template<>
class epicsShareClass PVValueArray<PVStructurePtr> : public detail::PVVectorStorage<PVStructurePtr,PVArray>
@@ -1225,7 +1252,8 @@ private:
/**
* Data class for a unionArray
* @brief Data class for a unionArray
*
*/
template<>
class epicsShareClass PVValueArray<PVUnionPtr> : public detail::PVVectorStorage<PVUnionPtr,PVArray>
@@ -1359,7 +1387,8 @@ typedef PVValueArray<std::string> PVStringArray;
typedef std::tr1::shared_ptr<PVStringArray> PVStringArrayPtr;
/**
* This is a singlton class for creating data instances.
* @brief This is a singlton class for creating data instances.
*
*/
class epicsShareClass PVDataCreate {
public:
@@ -1537,3 +1566,9 @@ epicsShareExtern PVDataCreatePtr getPVDataCreate();
}}
#endif /* PVDATA_H */
/** @page Overview Documentation
*
* <a href = "pvDataCPP.html">pvData.html</a>
*
*/
+46 -25
View File
@@ -163,7 +163,8 @@ enum Type {
};
/**
* Convenience functions for Type.
* @brief Convenience functions for Type.
*
*/
namespace TypeFunc {
/**
@@ -234,7 +235,8 @@ enum ScalarType {
#define MAX_SCALAR_TYPE pvString
/**
* Convenience functions for ScalarType.
* @brief Convenience functions for ScalarType.
*
*/
namespace ScalarTypeFunc {
/**
@@ -283,7 +285,8 @@ epicsShareExtern std::ostream& operator<<(std::ostream& o, const ScalarType& sca
/**
* This class implements introspection object for field.
* @brief This class implements introspection object for field.
*
*/
class epicsShareClass Field :
virtual public Serializable,
@@ -335,7 +338,8 @@ epicsShareExtern std::ostream& operator<<(std::ostream& o, const Field& field);
/**
* This class implements introspection object for Scalar.
* @brief This class implements introspection object for Scalar.
*
*/
class epicsShareClass Scalar : public Field{
public:
@@ -372,7 +376,8 @@ private:
};
/**
* This class implements introspection object for BoundedString.
* @brief This class implements introspection object for BoundedString.
*
*/
class epicsShareClass BoundedString : public Scalar{
public:
@@ -398,7 +403,8 @@ private:
};
/**
* This class implements introspection object for Array.
* @brief This class implements introspection object for Array.
*
*/
class epicsShareClass Array : public Field{
public:
@@ -433,14 +439,9 @@ protected:
};
/**
* This class implements introspection object for scalar array.
* @brief This class implements introspection object for scalar array.
*
*/
class epicsShareClass ScalarArray : public Array{
public:
@@ -484,7 +485,8 @@ private:
/**
* This class implements introspection object for bounded scalar array.
* @brief This class implements introspection object for bounded scalar array.
*
*/
class epicsShareClass BoundedScalarArray : public ScalarArray{
public:
@@ -518,7 +520,8 @@ private:
};
/**
* This class implements introspection object for bounded scalar array.
* @brief This class implements introspection object for bounded scalar array.
*
*/
class epicsShareClass FixedScalarArray : public ScalarArray{
public:
@@ -551,12 +554,9 @@ private:
friend class FieldCreate;
};
/**
* This class implements introspection object for a structureArray
* @brief This class implements introspection object for a structureArray
*
*/
class epicsShareClass StructureArray : public Array{
public:
@@ -597,7 +597,8 @@ private:
};
/**
* This class implements introspection object for a unionArray
* @brief This class implements introspection object for a unionArray
*
*/
class epicsShareClass UnionArray : public Array{
public:
@@ -638,7 +639,8 @@ private:
};
/**
* This class implements introspection object for a structure.
* @brief This class implements introspection object for a structure.
*
*/
class epicsShareClass Structure : public Field {
public:
@@ -719,7 +721,8 @@ private:
};
/**
* This class implements introspection object for a union.
* @brief This class implements introspection object for a union.
*
*/
class epicsShareClass Union : public Field {
public:
@@ -817,7 +820,8 @@ class FieldBuilder;
typedef std::tr1::shared_ptr<FieldBuilder> FieldBuilderPtr;
/**
* Interface for in-line creating of introspection interfaces.
* @brief Interface for in-line creating of introspection interfaces.
*
* One instance can be used to create multiple {@code Field} instances.
* An instance of this object must not be used concurrently (an object has a state).
* @author mse
@@ -981,7 +985,8 @@ private:
};
/**
* This is a singleton class for creating introspection interfaces.
* @brief This is a singleton class for creating introspection interfaces.
*
*/
class epicsShareClass FieldCreate {
public:
@@ -1179,14 +1184,26 @@ OP(pvDouble, double)
OP(pvString, std::string)
#undef OP
/**
* @brief Hash a Scalar
*
*/
struct ScalarHashFunction {
size_t operator() (const Scalar& scalar) const { return scalar.getScalarType(); }
};
/**
* @brief Hash a ScalarArray
*
*/
struct ScalarArrayHashFunction {
size_t operator() (const ScalarArray& scalarArray) const { return 0x10 | scalarArray.getElementType(); }
};
/**
* @brief Hash a Structure
*
*/
struct StructureHashFunction {
size_t operator() (const Structure& /*structure*/) const { return 0; }
// TODO hash
@@ -1194,6 +1211,10 @@ struct StructureHashFunction {
// return PRIME * Arrays.hashCode(fieldNames) + Arrays.hashCode(fields);
};
/**
* @brief Hash a StructureArray
*
*/
struct StructureArrayHashFunction {
size_t operator() (const StructureArray& structureArray) const { StructureHashFunction shf; return (0x10 | shf(*(structureArray.getStructure()))); }
};
+2 -1
View File
@@ -25,7 +25,8 @@ class StandardField;
typedef std::tr1::shared_ptr<StandardField> StandardFieldPtr;
/**
* Standard Fields is a class or creating or sharing Field objects for standard fields.
* @brief Standard Fields is a class or creating or sharing Field objects for standard fields.
*
* For each type of standard object two methods are defined:s
* one with no properties and with properties
* The property field is a comma separated string of property names of the following:
+2 -1
View File
@@ -25,7 +25,8 @@ class StandardPVField;
typedef std::tr1::shared_ptr<StandardPVField> StandardPVFieldPtr;
/**
* StandardPVField is a class or creating standard data fields.
* @brief StandardPVField is a class or creating standard data fields.
*
* Like class StandardField it has two forms of the methods which create a fields:
* one without properties and one with properties.
* The properties are some combination of alarm, timeStamp, control, display, and valueAlarm.