unsigned/size_t/shared ptrs
This commit is contained in:
@@ -43,7 +43,7 @@ private:
|
||||
return findMatchingBrace(request,closeBrace,numOpen-1);
|
||||
}
|
||||
|
||||
static void createFieldRequest(PVStructure* pvParent,std::string request,bool fieldListOK) {
|
||||
static void createFieldRequest(PVStructurePtr const & pvParent,std::string request,bool fieldListOK) {
|
||||
trim(request);
|
||||
if(request.length()<=0) return;
|
||||
size_t comma = request.find(',');
|
||||
@@ -57,9 +57,12 @@ private:
|
||||
THROW_BASE_EXCEPTION("mismatched { }");
|
||||
}
|
||||
String fieldName = request.substr(0,openBrace);
|
||||
std::auto_ptr<PVStructure> pvStructure(getPVDataCreate()->createPVStructure(pvParent, fieldName, 0));
|
||||
createFieldRequest(pvStructure.get(),request.substr(openBrace+1,closeBrace-openBrace-1),false);
|
||||
pvParent->appendPVField(pvStructure.release());
|
||||
|
||||
PVFieldPtrArray fields;
|
||||
StringArray fieldNames;
|
||||
PVStructurePtr pvStructure(getPVDataCreate()->createPVStructure(fieldNames, fields));
|
||||
createFieldRequest(pvStructure,request.substr(openBrace+1,closeBrace-openBrace-1),false);
|
||||
pvParent->appendPVField(fieldName, pvStructure);
|
||||
if(request.length()>closeBrace+1) {
|
||||
if(request.at(closeBrace+1) != ',') {
|
||||
THROW_BASE_EXCEPTION("misssing , after }");
|
||||
@@ -69,9 +72,9 @@ private:
|
||||
return;
|
||||
}
|
||||
if(openBracket==std::string::npos && fieldListOK) {
|
||||
std::auto_ptr<PVString> pvStringField(static_cast<PVString*>(getPVDataCreate()->createPVScalar(pvParent, "fieldList", pvString)));
|
||||
PVStringPtr pvStringField(std::tr1::static_pointer_cast<PVString>(getPVDataCreate()->createPVScalar(pvString)));
|
||||
pvStringField->put(request);
|
||||
pvParent->appendPVField(pvStringField.release());
|
||||
pvParent->appendPVField("fieldList", pvStringField);
|
||||
return;
|
||||
}
|
||||
if(openBracket!=std::string::npos && (comma==std::string::npos || comma>openBracket)) {
|
||||
@@ -95,30 +98,32 @@ private:
|
||||
createLeafFieldRequest(pvParent,request);
|
||||
}
|
||||
|
||||
static void createLeafFieldRequest(PVStructure* pvParent,String request) {
|
||||
static void createLeafFieldRequest(PVStructurePtr const & pvParent,String request) {
|
||||
size_t openBracket = request.find('[');
|
||||
String fullName = request;
|
||||
if(openBracket != std::string::npos) fullName = request.substr(0,openBracket);
|
||||
size_t indLast = fullName.rfind('.');
|
||||
String fieldName = fullName;
|
||||
if(indLast>1 && indLast != std::string::npos) fieldName = fullName.substr(indLast+1);
|
||||
std::auto_ptr<PVStructure> pvStructure(getPVDataCreate()->createPVStructure(pvParent, fieldName, 0));
|
||||
std::auto_ptr<PVStructure> pvLeaf(getPVDataCreate()->createPVStructure(pvStructure.get(),"leaf", 0));
|
||||
std::auto_ptr<PVString> pvStringField(static_cast<PVString*>(getPVDataCreate()->createPVScalar(pvLeaf.get(), "source", pvString)));
|
||||
PVFieldPtrArray fields;
|
||||
StringArray fieldNames;
|
||||
PVStructurePtr pvStructure(getPVDataCreate()->createPVStructure(fieldNames, fields));
|
||||
PVStructurePtr pvLeaf(getPVDataCreate()->createPVStructure(fieldNames, fields));
|
||||
PVStringPtr pvStringField(std::tr1::static_pointer_cast<PVString>(getPVDataCreate()->createPVScalar(pvString)));
|
||||
pvStringField->put(fullName);
|
||||
pvLeaf->appendPVField(pvStringField.release());
|
||||
pvLeaf->appendPVField("source", pvStringField);
|
||||
if(openBracket != std::string::npos) {
|
||||
size_t closeBracket = request.find(']');
|
||||
if(closeBracket==std::string::npos) {
|
||||
THROW_BASE_EXCEPTION("option does not have matching []");
|
||||
}
|
||||
createRequestOptions(pvLeaf.get(),request.substr(openBracket+1, closeBracket-openBracket-1));
|
||||
createRequestOptions(pvLeaf,request.substr(openBracket+1, closeBracket-openBracket-1));
|
||||
}
|
||||
pvStructure->appendPVField(pvLeaf.release());
|
||||
pvParent->appendPVField(pvStructure.release());
|
||||
pvStructure->appendPVField("leaf", pvLeaf);
|
||||
pvParent->appendPVField("fieldName", pvStructure);
|
||||
}
|
||||
|
||||
static void createRequestOptions(PVStructure* pvParent,std::string request) {
|
||||
static void createRequestOptions(PVStructurePtr const & pvParent,std::string request) {
|
||||
trim(request);
|
||||
if(request.length()<=1) return;
|
||||
|
||||
@@ -135,9 +140,9 @@ private:
|
||||
|
||||
if (equalsPos != std::string::npos)
|
||||
{
|
||||
std::auto_ptr<PVString> pvStringField(static_cast<PVString*>(getPVDataCreate()->createPVScalar(pvParent, token.substr(0, equalsPos), pvString)));
|
||||
PVStringPtr pvStringField(std::tr1::static_pointer_cast<PVString>(getPVDataCreate()->createPVScalar(pvString)));
|
||||
pvStringField->put(token.substr(equalsPos+1));
|
||||
pvParent->appendPVField(pvStringField.release());
|
||||
pvParent->appendPVField(token.substr(0, equalsPos), pvStringField);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -146,11 +151,13 @@ public:
|
||||
|
||||
virtual PVStructure::shared_pointer createRequest(String request)
|
||||
{
|
||||
static String emptyString;
|
||||
static PVFieldPtrArray emptyFields;
|
||||
static StringArray emptyFieldNames;
|
||||
|
||||
if (!request.empty()) trim(request);
|
||||
if (request.empty())
|
||||
{
|
||||
PVStructure::shared_pointer pvStructure(getPVDataCreate()->createPVStructure(0, emptyString, 0));
|
||||
PVStructure::shared_pointer pvStructure(getPVDataCreate()->createPVStructure(emptyFieldNames, emptyFields));
|
||||
return pvStructure;
|
||||
}
|
||||
|
||||
@@ -159,7 +166,7 @@ public:
|
||||
size_t offsetPutField = request.find("putField(");
|
||||
size_t offsetGetField = request.find("getField(");
|
||||
|
||||
PVStructure::shared_pointer pvStructure(getPVDataCreate()->createPVStructure(0, emptyString, 0));
|
||||
PVStructure::shared_pointer pvStructure(getPVDataCreate()->createPVStructure(emptyFieldNames, emptyFields));
|
||||
|
||||
if (offsetRecord != std::string::npos) {
|
||||
size_t offsetBegin = request.find('[', offsetRecord);
|
||||
@@ -167,9 +174,9 @@ public:
|
||||
if(offsetEnd == std::string::npos) {
|
||||
THROW_BASE_EXCEPTION("record[ does not have matching ]");
|
||||
}
|
||||
std::auto_ptr<PVStructure> pvStruct(getPVDataCreate()->createPVStructure(pvStructure.get(), "record", 0));
|
||||
createRequestOptions(pvStruct.get(),request.substr(offsetBegin+1, offsetEnd-offsetBegin-1));
|
||||
pvStructure->appendPVField(pvStruct.release());
|
||||
PVStructure::shared_pointer pvStruct(getPVDataCreate()->createPVStructure(emptyFieldNames, emptyFields));
|
||||
createRequestOptions(pvStruct,request.substr(offsetBegin+1, offsetEnd-offsetBegin-1));
|
||||
pvStructure->appendPVField("record", pvStruct);
|
||||
}
|
||||
if (offsetField != std::string::npos) {
|
||||
size_t offsetBegin = request.find('(', offsetField);
|
||||
@@ -177,9 +184,9 @@ public:
|
||||
if(offsetEnd == std::string::npos) {
|
||||
THROW_BASE_EXCEPTION("field( does not have matching )");
|
||||
}
|
||||
std::auto_ptr<PVStructure> pvStruct(getPVDataCreate()->createPVStructure(pvStructure.get(), "field", 0));
|
||||
createFieldRequest(pvStruct.get(),request.substr(offsetBegin+1, offsetEnd-offsetBegin-1),true);
|
||||
pvStructure->appendPVField(pvStruct.release());
|
||||
PVStructure::shared_pointer pvStruct(getPVDataCreate()->createPVStructure(emptyFieldNames, emptyFields));
|
||||
createFieldRequest(pvStruct,request.substr(offsetBegin+1, offsetEnd-offsetBegin-1),true);
|
||||
pvStructure->appendPVField("field", pvStruct);
|
||||
}
|
||||
if (offsetPutField != std::string::npos) {
|
||||
size_t offsetBegin = request.find('(', offsetPutField);
|
||||
@@ -187,9 +194,9 @@ public:
|
||||
if(offsetEnd == std::string::npos) {
|
||||
THROW_BASE_EXCEPTION("putField( does not have matching )");
|
||||
}
|
||||
std::auto_ptr<PVStructure> pvStruct(getPVDataCreate()->createPVStructure(pvStructure.get(), "putField", 0));
|
||||
createFieldRequest(pvStruct.get(),request.substr(offsetBegin+1, offsetEnd-offsetBegin-1),true);
|
||||
pvStructure->appendPVField(pvStruct.release());
|
||||
PVStructure::shared_pointer pvStruct(getPVDataCreate()->createPVStructure(emptyFieldNames, emptyFields));
|
||||
createFieldRequest(pvStruct,request.substr(offsetBegin+1, offsetEnd-offsetBegin-1),true);
|
||||
pvStructure->appendPVField("putField", pvStruct);
|
||||
}
|
||||
if (offsetGetField != std::string::npos) {
|
||||
size_t offsetBegin = request.find('(', offsetGetField);
|
||||
@@ -197,12 +204,12 @@ public:
|
||||
if(offsetEnd == std::string::npos) {
|
||||
THROW_BASE_EXCEPTION("getField( does not have matching )");
|
||||
}
|
||||
std::auto_ptr<PVStructure> pvStruct(getPVDataCreate()->createPVStructure(pvStructure.get(), "getField", 0));
|
||||
createFieldRequest(pvStruct.get(),request.substr(offsetBegin+1, offsetEnd-offsetBegin-1),true);
|
||||
pvStructure->appendPVField(pvStruct.release());
|
||||
PVStructure::shared_pointer pvStruct(getPVDataCreate()->createPVStructure(emptyFieldNames, emptyFields));
|
||||
createFieldRequest(pvStruct,request.substr(offsetBegin+1, offsetEnd-offsetBegin-1),true);
|
||||
pvStructure->appendPVField("getField", pvStruct);
|
||||
}
|
||||
if (pvStructure.get()->getStructure()->getNumberFields()==0) {
|
||||
createFieldRequest(pvStructure.get(),request,true);
|
||||
createFieldRequest(pvStructure,request,true);
|
||||
}
|
||||
return pvStructure;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user