/* removeRecord.cpp */ /** * Copyright - See the COPYRIGHT that is included with this distribution. * EPICS pvData is distributed subject to a Software License Agreement found * in file LICENSE that is included with this distribution. */ /** * @author mrk * @date 2013.04.18 */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define epicsExportSharedSymbols #include "pv/pvStructureCopy.h" #include "pv/pvDatabase.h" #include "pv/removeRecord.h" using std::tr1::static_pointer_cast; using namespace epics::pvData; using namespace epics::pvAccess; using namespace std; namespace epics { namespace pvDatabase { RemoveRecordPtr RemoveRecord::create( std::string const & recordName) { FieldCreatePtr fieldCreate = getFieldCreate(); PVDataCreatePtr pvDataCreate = getPVDataCreate(); StructureConstPtr topStructure = fieldCreate->createFieldBuilder()-> addNestedStructure("argument")-> add("recordName",pvString)-> endNested()-> addNestedStructure("result") -> add("status",pvString) -> endNested()-> createStructure(); PVStructurePtr pvStructure = pvDataCreate->createPVStructure(topStructure); RemoveRecordPtr pvRecord( new RemoveRecord(recordName,pvStructure)); if(!pvRecord->init()) pvRecord.reset(); return pvRecord; } RemoveRecord::RemoveRecord( std::string const & recordName, epics::pvData::PVStructurePtr const & pvStructure) : PVRecord(recordName,pvStructure) { } bool RemoveRecord::init() { initPVRecord(); PVStructurePtr pvStructure = getPVStructure(); pvRecordName = pvStructure->getSubField("argument.recordName"); if(!pvRecordName) return false; pvResult = pvStructure->getSubField("result.status"); if(!pvResult) return false; return true; } void RemoveRecord::process() { string name = pvRecordName->get(); PVRecordPtr pvRecord = PVDatabase::getMaster()->findRecord(name); if(!pvRecord) { pvResult->put(name + " not found"); return; } pvRecord->remove(); pvResult->put("success"); } }}