13 #include <pv/sharedPtr.h> 14 #include <pv/sharedVector.h> 16 namespace epics{
namespace pvAccess{
17 class ChannelProvider;
19 class ChannelRequester;
107 POINTER_DEFINITIONS(StaticProvider);
110 std::tr1::shared_ptr<Impl> impl;
114 struct epicsShareClass ChannelBuilder {
115 POINTER_DEFINITIONS(ChannelBuilder);
116 virtual ~ChannelBuilder();
118 virtual std::tr1::shared_ptr<epics::pvAccess::Channel> connect(
const std::tr1::shared_ptr<epics::pvAccess::ChannelProvider>& provider,
119 const std::string& name,
120 const std::tr1::shared_ptr<epics::pvAccess::ChannelRequester>& requester) =0;
123 virtual void disconnect(
bool destroy,
const epics::pvAccess::ChannelProvider* provider) =0;
126 typedef std::map<std::string, std::tr1::shared_ptr<ChannelBuilder> > builders_t;
128 typedef builders_t::const_iterator const_iterator;
132 explicit StaticProvider(
const std::string& name);
138 void close(
bool destroy=
false);
141 void add(
const std::string& name,
142 const std::tr1::shared_ptr<ChannelBuilder>& builder);
146 std::tr1::shared_ptr<ChannelBuilder> remove(
const std::string& name);
149 std::tr1::shared_ptr<epics::pvAccess::ChannelProvider> provider()
const;
152 const_iterator begin()
const;
153 const_iterator end()
const;
165 POINTER_DEFINITIONS(DynamicProvider);
168 std::tr1::shared_ptr<Impl> impl;
175 const ::epics::pvAccess::PeerInfo* peerinfo;
176 Search(
const std::string& name,
const ::epics::pvAccess::PeerInfo* peer)
177 :isclaimed(
false),cname(name),peerinfo(peer)
181 const std::string& name()
const {
return cname; }
183 bool claimed()
const {
return isclaimed; }
185 void claim() { isclaimed =
true; }
189 const ::epics::pvAccess::PeerInfo* peer()
const {
return peerinfo; }
191 typedef std::vector<Search> search_type;
199 struct epicsShareClass Handler {
200 POINTER_DEFINITIONS(Handler);
201 typedef epics::pvData::shared_vector<std::string> names_type;
202 virtual ~Handler() {}
204 virtual void hasChannels(search_type& name) =0;
206 virtual void listChannels(names_type& names,
bool& dynamic) {}
208 virtual std::tr1::shared_ptr<epics::pvAccess::Channel> createChannel(
const std::tr1::shared_ptr<epics::pvAccess::ChannelProvider>& provider,
209 const std::string& name,
210 const std::tr1::shared_ptr<epics::pvAccess::ChannelRequester>& requester) =0;
212 virtual void destroy() {}
218 DynamicProvider(
const std::string& name,
219 const std::tr1::shared_ptr<Handler>& handler);
222 Handler::shared_pointer getHandler()
const;
227 std::tr1::shared_ptr<epics::pvAccess::ChannelProvider> provider()
const;
A Provider based on a list of SharedPV instance.
A Provider which has no pre-configured list of names.