pass dbChannel* to PVIFBuilder::create()

This commit is contained in:
Michael Davidsaver
2020-05-31 11:59:23 -07:00
parent eae493e732
commit b69c25feb6
4 changed files with 31 additions and 24 deletions

View File

@ -447,7 +447,7 @@ PDBProvider::PDBProvider(const epics::pvAccess::Configuration::const_shared_poin
chan.swap(temp);
}
std::tr1::shared_ptr<PVIFBuilder> pvifbuilder(PVIFBuilder::create(mem.type));
std::tr1::shared_ptr<PVIFBuilder> pvifbuilder(PVIFBuilder::create(mem.type, chan.chan));
if(!parts.empty())
builder = pvifbuilder->dtype(builder, parts.back().name, chan);

View File

@ -1229,7 +1229,7 @@ PVIFBuilder::dtype(epics::pvData::FieldBuilderPtr& builder,
return builder;
}
PVIFBuilder* PVIFBuilder::create(const std::string& type)
PVIFBuilder* PVIFBuilder::create(const std::string& type, dbChannel* chan)
{
if(type.empty() || type=="scalar")
return new ScalarBuilder;

View File

@ -407,7 +407,7 @@ struct QSRV_API PVIFBuilder {
virtual PVIF* attach(dbChannel *channel, const epics::pvData::PVStructurePtr& root, const FieldName& fld) =0;
// entry point for Builder
static PVIFBuilder* create(const std::string& name);
static PVIFBuilder* create(const std::string& mapname, dbChannel* chan);
protected:
PVIFBuilder() {}
private:

View File

@ -424,30 +424,37 @@ void testPlain()
DBCH chan_ai("test:ai");
DBCH chan_mbbi("test:mbbi");
p2p::auto_ptr<PVIFBuilder> builder;
pvd::PVStructurePtr root;
p2p::auto_ptr<PVIF> pvif_li;
p2p::auto_ptr<PVIF> pvif_si;
p2p::auto_ptr<PVIF> pvif_ai;
p2p::auto_ptr<PVIF> pvif_mbbi;
{
builder.reset(PVIFBuilder::create("plain"));
p2p::auto_ptr<PVIFBuilder> builder_li(PVIFBuilder::create("plain", chan_li));
p2p::auto_ptr<PVIFBuilder> builder_si(PVIFBuilder::create("plain", chan_si));
p2p::auto_ptr<PVIFBuilder> builder_ai(PVIFBuilder::create("plain", chan_ai));
p2p::auto_ptr<PVIFBuilder> builder_mbbi(PVIFBuilder::create("plain", chan_mbbi));
pvd::FieldConstPtr dtype_li(builder_li->dtype(chan_li));
pvd::FieldConstPtr dtype_si(builder_si->dtype(chan_si));
pvd::FieldConstPtr dtype_ai(builder_ai->dtype(chan_ai));
pvd::FieldConstPtr dtype_mbbi(builder_mbbi->dtype(chan_mbbi));
pvd::StructureConstPtr dtype_root(pvd::getFieldCreate()->createFieldBuilder()
->add("li", dtype_li)
->add("si", dtype_si)
->add("ai", dtype_ai)
->add("mbbi", dtype_mbbi)
->createStructure());
root = pvd::getPVDataCreate()->createPVStructure(dtype_root);
pvif_li.reset(builder_li->attach(chan_li, root, FieldName("li")));
pvif_si.reset(builder_si->attach(chan_si, root, FieldName("si")));
pvif_ai.reset(builder_ai->attach(chan_ai, root, FieldName("ai")));
pvif_mbbi.reset(builder_mbbi->attach(chan_mbbi, root, FieldName("mbbi")));
}
pvd::FieldConstPtr dtype_li(builder->dtype(chan_li));
pvd::FieldConstPtr dtype_si(builder->dtype(chan_si));
pvd::FieldConstPtr dtype_ai(builder->dtype(chan_ai));
pvd::FieldConstPtr dtype_mbbi(builder->dtype(chan_mbbi));
pvd::StructureConstPtr dtype_root(pvd::getFieldCreate()->createFieldBuilder()
->add("li", dtype_li)
->add("si", dtype_si)
->add("ai", dtype_ai)
->add("mbbi", dtype_mbbi)
->createStructure());
pvd::PVStructurePtr root(pvd::getPVDataCreate()->createPVStructure(dtype_root));
p2p::auto_ptr<PVIF> pvif_li(builder->attach(chan_li, root, FieldName("li")));
p2p::auto_ptr<PVIF> pvif_si(builder->attach(chan_si, root, FieldName("si")));
p2p::auto_ptr<PVIF> pvif_ai(builder->attach(chan_ai, root, FieldName("ai")));
p2p::auto_ptr<PVIF> pvif_mbbi(builder->attach(chan_mbbi, root, FieldName("mbbi")));
pvd::BitSet mask;
mask.clear();