Misc fixes and error checking

fix argument type for getScalarType
mark getFieldName as const
Argument checking for Field construction
This commit is contained in:
Michael Davidsaver
2013-05-24 18:26:47 -04:00
parent 9039a10c9a
commit 57804494ef
3 changed files with 16 additions and 6 deletions

View File

@@ -66,7 +66,11 @@ struct StructureArrayHashFunction {
Scalar::Scalar(ScalarType scalarType)
: Field(scalar),scalarType(scalarType){}
: Field(scalar),scalarType(scalarType)
{
if(scalarType<pvBoolean || scalarType>pvString)
throw std::invalid_argument("Can't construct Scalar from invalid ScalarType");
}
Scalar::~Scalar(){}
@@ -166,7 +170,11 @@ static StructureConstPtr deserializeStructureField(const FieldCreate* fieldCreat
}
ScalarArray::ScalarArray(ScalarType elementType)
: Field(scalarArray),elementType(elementType){}
: Field(scalarArray),elementType(elementType)
{
if(elementType<pvBoolean || elementType>pvString)
throw std::invalid_argument("Can't construct ScalarArray from invalid ScalarType");
}
ScalarArray::~ScalarArray() {}
@@ -275,10 +283,12 @@ Structure::Structure (
}
size_t number = fields.size();
for(size_t i=0; i<number; i++) {
String name = fieldNames[i];
if(name.size()<1) {
const String& name = fieldNames[i];
if(name.empty()) {
throw std::invalid_argument("fieldNames has a zero length string");
}
if(fields[i].get()==NULL)
throw std::invalid_argument("Can't construct Structure with NULL Field");
// look for duplicates
for(size_t j=i+1; j<number; j++) {
String otherName = fieldNames[j];

View File

@@ -61,7 +61,7 @@ namespace ScalarTypeFunc {
"ubyte", "ushort", "uint", "ulong",
"float", "double", "string",
};
ScalarType getScalarType(String pvalue) {
ScalarType getScalarType(const String& pvalue) {
for(size_t i=0; i<NELEMENTS(names); i++)
if(pvalue==names[i])
return ScalarType(i);

View File

@@ -443,7 +443,7 @@ public:
* @param fieldIndex The index of the desired field.
* @return The fieldName.
*/
String getFieldName(std::size_t fieldIndex){return fieldNames[fieldIndex];}
String getFieldName(std::size_t fieldIndex) const {return fieldNames[fieldIndex];}
/**
* Convert the structure to a string and add it to builder.
* @param builder The string builder.