10 #define epicsExportSharedSymbols 17 namespace epics {
namespace nt {
24 NTURIBuilder::shared_pointer NTURIBuilder::addQueryString(std::string
const & name)
26 if (std::find(queryFieldNames.begin(), queryFieldNames.end(), name) != queryFieldNames.end())
27 throw std::runtime_error(
"duplicate query field name");
29 queryFieldNames.push_back(name);
32 return shared_from_this();
35 NTURIBuilder::shared_pointer NTURIBuilder::addQueryDouble(std::string
const & name)
37 if (std::find(queryFieldNames.begin(), queryFieldNames.end(), name) != queryFieldNames.end())
38 throw std::runtime_error(
"duplicate query field name");
40 queryFieldNames.push_back(name);
43 return shared_from_this();
46 NTURIBuilder::shared_pointer NTURIBuilder::addQueryInt(std::string
const & name)
48 if (std::find(queryFieldNames.begin(), queryFieldNames.end(), name) != queryFieldNames.end())
49 throw std::runtime_error(
"duplicate query field name");
51 queryFieldNames.push_back(name);
52 queryTypes.push_back(
pvInt);
54 return shared_from_this();
60 createFieldBuilder()->
69 if (!queryFieldNames.empty())
72 addNestedStructure(
"query");
74 vector<string>::size_type len = queryFieldNames.size();
75 for (vector<string>::size_type
i = 0;
i < len;
i++)
76 nestedBuilder->add(queryFieldNames[
i], queryTypes[i]);
78 builder = nestedBuilder->endNested();
81 size_t extraCount = extraFieldNames.size();
82 for (
size_t i = 0;
i< extraCount;
i++)
83 builder->add(extraFieldNames[
i], extraFields[i]);
91 NTURIBuilder::shared_pointer NTURIBuilder::addAuthority()
94 return shared_from_this();
107 NTURIBuilder::NTURIBuilder()
112 void NTURIBuilder::reset()
114 queryFieldNames.clear();
119 NTURIBuilder::shared_pointer NTURIBuilder::add(
string const & name,
FieldConstPtr const & field)
121 extraFields.push_back(field);
122 extraFieldNames.push_back(name);
123 return shared_from_this();
128 const std::string NTURI::URI(
"epics:nt/NTURI:1.0");
132 if(!isCompatible(pvStructure))
return shared_pointer();
133 return wrapUnsafe(pvStructure);
138 return shared_pointer(
new NTURI(pvStructure));
143 return NTUtils::is_a(structure->getID(), URI);
148 return is_a(pvStructure->getStructure());
160 .has<Scalar>(
"scheme")
162 .maybeHas<Scalar>(
"authority")
169 StringArray::const_iterator it;
171 for (it = names.begin(); it != names.end(); ++it)
177 return result.
valid();
183 if(!pvStructure)
return false;
185 return isCompatible(pvStructure->getStructure());
188 bool NTURI::isValid()
207 return pvNTURI->getSubField<
PVString>(
"scheme");
212 return pvNTURI->getSubField<
PVString>(
"authority");
217 return pvNTURI->getSubField<
PVString>(
"path");
230 PVFieldPtr NTURI::getQueryField(std::string
const & name)
const FORCE_INLINE std::tr1::shared_ptr< PVField > getSubField(A a)
This class implements introspection object for Scalar.
Convenience Class for NTURI.
Validation methods for NT types.
TODO only here because of the Lockable.
std::tr1::shared_ptr< const Structure > StructureConstPtr
std::tr1::shared_ptr< NTField > NTFieldPtr
std::tr1::shared_ptr< FieldBuilder > FieldBuilderPtr
Interface for in-line creating of NTURI.
std::tr1::shared_ptr< NTURI > NTURIPtr
PVString is special case, since it implements SerializableArray.
This class implements introspection object for a structure.
Data interface for a structure,.
std::tr1::shared_ptr< const Field > FieldConstPtr
FORCE_INLINE const FieldCreatePtr & getFieldCreate()
This class implements introspection object for scalar array.
std::tr1::shared_ptr< PVStructure > PVStructurePtr
Result & has(const std::string &name)
std::tr1::shared_ptr< PVString > PVStringPtr
std::vector< std::string > StringArray
std::tr1::shared_ptr< PVField > PVFieldPtr
std::tr1::shared_ptr< detail::NTURIBuilder > NTURIBuilderPtr
FORCE_INLINE const PVDataCreatePtr & getPVDataCreate()