From baf8832fc9a98242c6aa53eb99cecb4a33348f12 Mon Sep 17 00:00:00 2001 From: Marty Kraimer Date: Tue, 19 Aug 2014 09:15:06 -0400 Subject: [PATCH] allow record[] field() getField() putField() --- src/copy/createRequest.cpp | 42 +++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/src/copy/createRequest.cpp b/src/copy/createRequest.cpp index f80dc24..726fb1a 100644 --- a/src/copy/createRequest.cpp +++ b/src/copy/createRequest.cpp @@ -374,49 +374,57 @@ public: "record[ does not have matching ]"; return PVStructurePtr(); } - Node node("record"); - Node optNode = createRequestOptions( - request.substr(openBracket+1,closeBracket-openBracket-1)); - node.nodes.push_back(optNode); - top.push_back(node); + if(closeBracket-openBracket > 3) { + Node node("record"); + Node optNode = createRequestOptions( + request.substr(openBracket+1,closeBracket-openBracket-1)); + node.nodes.push_back(optNode); + top.push_back(node); + } } if(offsetField!=string::npos) { fullFieldName = "field"; Node node("field"); - size_t openBrace = request.find('(', offsetField); - size_t closeBrace = request.find(')', openBrace); - if(closeBrace==string::npos) { + size_t openParan = request.find('(', offsetField); + size_t closeParan = request.find(')', openParan); + if(closeParan==string::npos) { message = request.substr(offsetField) + " field( does not have matching )"; return PVStructurePtr(); } - createSubNode(node,request.substr(openBrace+1,closeBrace-openBrace-1)); + if(closeParan>openParan+1) { + createSubNode(node,request.substr(openParan+1,closeParan-openParan-1)); + } top.push_back(node); } if(offsetGetField!=string::npos) { fullFieldName = "getField"; Node node("getField"); - size_t openBrace = request.find('(', offsetGetField); - size_t closeBrace = request.find(')', openBrace); - if(closeBrace==string::npos) { + size_t openParan = request.find('(', offsetGetField); + size_t closeParan = request.find(')', openParan); + if(closeParan==string::npos) { message = request.substr(offsetField) + " getField( does not have matching )"; return PVStructurePtr(); } - createSubNode(node,request.substr(openBrace+1,closeBrace-openBrace-1)); + if(closeParan>openParan+1) { + createSubNode(node,request.substr(openParan+1,closeParan-openParan-1)); + } top.push_back(node); } if(offsetPutField!=string::npos) { fullFieldName = "putField"; Node node("putField"); - size_t openBrace = request.find('(', offsetPutField); - size_t closeBrace = request.find(')', openBrace); - if(closeBrace==string::npos) { + size_t openParan = request.find('(', offsetPutField); + size_t closeParan = request.find(')', openParan); + if(closeParan==string::npos) { message = request.substr(offsetField) + " putField( does not have matching )"; return PVStructurePtr(); } - createSubNode(node,request.substr(openBrace+1,closeBrace-openBrace-1)); + if(closeParan>openParan+1) { + createSubNode(node,request.substr(openParan+1,closeParan-openParan-1)); + } top.push_back(node); } } catch (std::exception &e) {