From 32aa0dd72f50de98749260912435d977b197ff24 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Mon, 6 Aug 2018 09:03:41 -0700 Subject: [PATCH] drop extractRequestMask() superceded by PVRequestMapper --- src/copy/Makefile | 1 - src/copy/pv/createRequest.h | 19 ------- src/copy/requestmask.cpp | 85 ------------------------------ testApp/copy/testCreateRequest.cpp | 82 +--------------------------- 4 files changed, 1 insertion(+), 186 deletions(-) delete mode 100644 src/copy/requestmask.cpp diff --git a/src/copy/Makefile b/src/copy/Makefile index 5a6cdfc..ced2948 100644 --- a/src/copy/Makefile +++ b/src/copy/Makefile @@ -6,6 +6,5 @@ INC += pv/createRequest.h INC += pv/pvCopy.h LIBSRCS += createRequest.cpp -LIBSRCS += requestmask.cpp LIBSRCS += requestmapper.cpp LIBSRCS += pvCopy.cpp diff --git a/src/copy/pv/createRequest.h b/src/copy/pv/createRequest.h index f465c68..c761d97 100644 --- a/src/copy/pv/createRequest.h +++ b/src/copy/pv/createRequest.h @@ -65,25 +65,6 @@ protected: epicsShareExtern PVStructure::shared_pointer createRequest(std::string const & request); -/** Extract a bit mask of fields from a field selection mask. - * - @param type The Structure to which the mask will be applied - @param pvRequestMask The 'field' sub-structure of a pvRequest. May be NULL - @param expand If true, expand any "compressed" sub-structure bits - @returns A bit mask, where the bits are field offset in 'type'. - * - @code - PVStructure::const_shared_pointer value(...), // some Structure with .value - pvRequest(createRequest("field(value)")); - BitSet fieldMask(extractRequestMask(value, pvRequest->getSubField("field")); - assert(fieldMask == BitSet().set(value->getSubFieldT("value")->getFieldOffset()); - @endcode - */ -epicsShareExtern -BitSet extractRequestMask(const PVStructure::const_shared_pointer& type, - const PVStructure::const_shared_pointer& pvRequestMask, - bool expand = true); - /** Helper for implementations of epics::pvAccess::ChannelProvider in interpreting the * 'field' substructure of a pvRequest. * Copies between an internal (base) Structure, and a client/user visible (requested) Structure. diff --git a/src/copy/requestmask.cpp b/src/copy/requestmask.cpp deleted file mode 100644 index 1ad3176..0000000 --- a/src/copy/requestmask.cpp +++ /dev/null @@ -1,85 +0,0 @@ - -#include -#include -#include -#include -#include -#include - -#define epicsExportSharedSymbols -#include -#include - -namespace epics{namespace pvData { - -static -void setStruct(BitSet& ret, const PVStructure& S) -{ - for(size_t i=S.getFieldOffset(), L=S.getNextFieldOffset(); igetFieldNames(); - - if(reqNames.empty()) { - // empty sub-structure selects all members - ret.set(type->getFieldOffset()); - if(expand) setStruct(ret, *type); - - } else { - // iterate through request fields - for(size_t i=0, N=reqNames.size(); igetSubField(reqNames[i])); - const FieldConstPtr& subReq = pvRequestMask->getFields()[i]; - - if(!subtype || subReq->getType()!=structure) - continue; // TODO: warn/error on invalid selection? - - if(subtype->getField()->getType()==structure && depth<5) { - // requested field is a Structure, recurse if below arbitrary limit - _buildMask(ret, - static_cast(subtype.get()), - static_cast(subReq.get()), - expand, - depth+1); - - } else { - // requested field so not a structure, or at recursion limit, so just select it and move on - ret.set(subtype->getFieldOffset()); - if(expand && subtype->getField()->getType()==structure) setStruct(ret, static_cast(*subtype)); - // TODO: error if subReq has sub-structure? - } - - } - } -} - -BitSet extractRequestMask(const PVStructure::const_shared_pointer& type, - const PVStructure::const_shared_pointer& pvRequestMask, - bool expand) -{ - BitSet ret; - - if(!type) - throw std::invalid_argument("NULL type not allowed"); - - if(!pvRequestMask) { - // we treat no sub-struct as wildcard. (totally empty selection is useless) - ret.set(0); - if(expand) setStruct(ret, *type); - - } else { - _buildMask(ret, type.get(), pvRequestMask->getStructure().get(), expand, 0); - } - - return ret; -} - - -}} //namespace epics::pvData diff --git a/testApp/copy/testCreateRequest.cpp b/testApp/copy/testCreateRequest.cpp index 70667cf..0fb793c 100644 --- a/testApp/copy/testCreateRequest.cpp +++ b/testApp/copy/testCreateRequest.cpp @@ -355,85 +355,6 @@ StructureConstPtr maskingType = getFieldCreate()->createFieldBuilder() ->endNested() ->createStructure(); -static -void checkMask(bool expand, - const std::string& request, - const BitSet& expected) -{ - PVStructurePtr pvRequest(createRequest(request)); - PVStructurePtr value(getPVDataCreate()->createPVStructure(maskingType)); - - BitSet actual(extractRequestMask(value, pvRequest->getSubField("field"), expand)); - - testEqual(actual, expected)<<" request=\""<createPVStructure(maskingType)); - testShow()<getSubField("A")->getFieldOffset()) - .set(V->getSubField("B")->getFieldOffset()) - .set(V->getSubField("C")->getFieldOffset()) - .set(V->getSubField("C.D")->getFieldOffset()) - .set(V->getSubField("C.E")->getFieldOffset()) - .set(V->getSubField("C.E.F")->getFieldOffset())); - - checkMask(false, "field()", BitSet().set(0)); - checkMask(true, "field()", BitSet().set(0) - .set(V->getSubField("A")->getFieldOffset()) - .set(V->getSubField("B")->getFieldOffset()) - .set(V->getSubField("C")->getFieldOffset()) - .set(V->getSubField("C.D")->getFieldOffset()) - .set(V->getSubField("C.E")->getFieldOffset()) - .set(V->getSubField("C.E.F")->getFieldOffset())); - - checkMask(false, "field(A)", BitSet() - .set(V->getSubField("A")->getFieldOffset())); - checkMask(true, "field(A)", BitSet() - .set(V->getSubField("A")->getFieldOffset())); - - checkMask(false, "field(A,B)", BitSet() - .set(V->getSubField("A")->getFieldOffset()) - .set(V->getSubField("B")->getFieldOffset())); - - checkMask(false, "field(A,C)", BitSet() - .set(V->getSubField("A")->getFieldOffset()) - .set(V->getSubField("C")->getFieldOffset())); - - checkMask(true, "field(A,C)", BitSet() - .set(V->getSubField("A")->getFieldOffset()) - .set(V->getSubField("C")->getFieldOffset()) - .set(V->getSubField("C.D")->getFieldOffset()) - .set(V->getSubField("C.E")->getFieldOffset()) - .set(V->getSubField("C.E.F")->getFieldOffset())); - - checkMask(false, "field(C.D)", BitSet() - .set(V->getSubField("C.D")->getFieldOffset())); - - checkMask(true, "field(C.D)", BitSet() - .set(V->getSubField("C.D")->getFieldOffset())); - - checkMask(false, "field(A,C{D,E.F})", BitSet() - .set(V->getSubField("A")->getFieldOffset()) - .set(V->getSubField("C.D")->getFieldOffset()) - .set(V->getSubField("C.E.F")->getFieldOffset())); - - checkMask(true, "field(A,C{D,E.F})", BitSet() - .set(V->getSubField("A")->getFieldOffset()) - .set(V->getSubField("C.D")->getFieldOffset()) - .set(V->getSubField("C.E.F")->getFieldOffset())); - - // request for non-existant field is silently ignored - checkMask(false, "field(A,foo)", BitSet() - .set(V->getSubField("A")->getFieldOffset())); -} - static void testMapper(PVRequestMapper::mode_t mode) { @@ -780,10 +701,9 @@ void testMaskErr() MAIN(testCreateRequest) { - testPlan(329); + testPlan(315); testCreateRequestInternal(); testBadRequest(); - testMask(); testMapper(PVRequestMapper::Slice); testMapper(PVRequestMapper::Mask); #undef TEST_METHOD