This is Unofficial EPICS BASE Doxygen Site
epics::pvData::ValueBuilder::child_struct Struct Reference
+ Inheritance diagram for epics::pvData::ValueBuilder::child_struct:
+ Collaboration diagram for epics::pvData::ValueBuilder::child_struct:

Public Member Functions

virtual ~child_struct ()
 
 child_struct (ValueBuilder *par, const std::string &id)
 
virtual void build (const std::string &name, FieldBuilderPtr &builder) OVERRIDE FINAL
 
virtual void store (const PVFieldPtr &val) OVERRIDE FINAL
 
- Public Member Functions inherited from epics::pvData::ValueBuilder::child
virtual ~child ()
 
 child (Type t)
 

Static Public Member Functions

static void buildStruct (const ValueBuilder &self, FieldBuilderPtr &builder)
 
static void storeStruct (const ValueBuilder &self, const PVStructurePtr &val)
 
static void fillStruct (ValueBuilder &self, const PVStructure &val)
 

Public Attributes

ValueBuilder builder
 
- Public Attributes inherited from epics::pvData::ValueBuilder::child
Type type
 

Detailed Description

Definition at line 23 of file valueBuilder.cpp.

Constructor & Destructor Documentation

virtual epics::pvData::ValueBuilder::child_struct::~child_struct ( )
inlinevirtual

Definition at line 25 of file valueBuilder.cpp.

25 {}
epics::pvData::ValueBuilder::child_struct::child_struct ( ValueBuilder par,
const std::string &  id 
)
inline

Member Function Documentation

virtual void epics::pvData::ValueBuilder::child_struct::build ( const std::string &  name,
FieldBuilderPtr builder 
)
inlinevirtual

Implements epics::pvData::ValueBuilder::child.

Definition at line 32 of file valueBuilder.cpp.

33  {
34  FieldBuilderPtr nest(builder->addNestedStructure(name));
35  buildStruct(this->builder, nest);
36  builder = nest->endNested();
37  }
ValueBuilder & endNested()
End a sub-structure.
std::tr1::shared_ptr< FieldBuilder > FieldBuilderPtr
static void buildStruct(const ValueBuilder &self, FieldBuilderPtr &builder)
void epics::pvData::ValueBuilder::child_struct::buildStruct ( const ValueBuilder self,
FieldBuilderPtr builder 
)
static

Definition at line 255 of file valueBuilder.cpp.

256 {
257  if(!self.id.empty())
258  builder->setId(self.id);
259 
260  for(children_t::const_iterator it=self.children.begin(), end=self.children.end(); it!=end; ++it)
261  {
262  it->second->build(it->first, builder);
263  }
264 }
epics::pvData::BitSetPtr empty
Definition: pvAccess.cpp:135
void epics::pvData::ValueBuilder::child_struct::fillStruct ( ValueBuilder self,
const PVStructure val 
)
static

Definition at line 106 of file valueBuilder.cpp.

107 {
108  StructureConstPtr type(val.getStructure());
109  const StringArray& field = type->getFieldNames();
110  for(StringArray::const_iterator it=field.begin(), end=field.end(); it!=end; ++it)
111  {
112  PVField::const_shared_pointer sub(val.getSubField(*it));
113  assert(sub);
114  FieldConstPtr subtype(sub->getField());
115  switch(subtype->getType()) {
116  case scalar:
117  {
118  const PVScalar* subs(static_cast<const PVScalar*>(sub.get()));
119  ScalarType stype = subs->getScalar()->getScalarType();
120  switch(stype) {
121 #define STYPE(stype) case pv##stype: { const PV ##stype* ptr(static_cast<const PV##stype*>(subs)); PV##stype::value_type temp(ptr->get()); self._add(*it, pv##stype, &temp); } break
122  STYPE(Boolean);
123  STYPE(Byte);
124  STYPE(Short);
125  STYPE(Int);
126  STYPE(Long);
127  STYPE(UByte);
128  STYPE(UShort);
129  STYPE(UInt);
130  STYPE(ULong);
131  STYPE(Float);
132  STYPE(Double);
133  STYPE(String);
134 #undef STYPE
135  }
136  }
137  break;
138  case structure:
139  self._add(*it, *static_cast<const PVStructure*>(sub.get()));
140  break;
141  default:
142  THROW_EXCEPTION2(std::runtime_error, "ValueBuilder can only clone scalar and structure");
143  }
144  }
145 }
#define assert(exp)
Declare that a condition should be true.
Definition: epicsAssert.h:70
#define THROW_EXCEPTION2(TYPE, MSG)
std::tr1::shared_ptr< const Structure > StructureConstPtr
Definition: pvIntrospect.h:162
std::tr1::shared_ptr< const Field > FieldConstPtr
Definition: pvIntrospect.h:137
std::vector< std::string > StringArray
Definition: pvType.h:110
#define STYPE(stype)
virtual void epics::pvData::ValueBuilder::child_struct::store ( const PVFieldPtr val)
inlinevirtual

Implements epics::pvData::ValueBuilder::child.

Definition at line 38 of file valueBuilder.cpp.

39  {
40  if(val->getField()->getType()!=structure)
41  THROW_EXCEPTION2(std::logic_error, "Structure type mis-match");
42  PVStructurePtr str(std::tr1::static_pointer_cast<PVStructure>(val));
44  }
#define THROW_EXCEPTION2(TYPE, MSG)
#define str(v)
std::tr1::shared_ptr< PVStructure > PVStructurePtr
Definition: pvData.h:87
static void storeStruct(const ValueBuilder &self, const PVStructurePtr &val)
void epics::pvData::ValueBuilder::child_struct::storeStruct ( const ValueBuilder self,
const PVStructurePtr val 
)
static

Definition at line 266 of file valueBuilder.cpp.

267 {
268  for(children_t::const_iterator it=self.children.begin(), end=self.children.end(); it!=end; ++it)
269  {
270  it->second->store(val->getSubFieldT(it->first));
271  }
272 }

Member Data Documentation

ValueBuilder epics::pvData::ValueBuilder::child_struct::builder

Definition at line 31 of file valueBuilder.cpp.


The documentation for this struct was generated from the following file: