17 #define epicsExportSharedSymbols 38 pva::ChannelFind::shared_pointer
finder;
46 Impl(
const std::string& name)
49 REFTRACE_INCREMENT(num_instances);
52 REFTRACE_DECREMENT(num_instances);
58 virtual pva::ChannelFind::shared_pointer
channelFind(std::string
const & name,
66 found = builders.find(name)!=builders.end();
77 for(builders_t::const_iterator it(builders.begin()),
end(builders.end()); it!=
end; ++it) {
84 virtual pva::Channel::shared_pointer
createChannel(std::string
const & name,
85 pva::ChannelRequester::shared_pointer
const &
requester,
88 pva::Channel::shared_pointer ret;
91 builders_t::mapped_type builder;
94 builders_t::const_iterator it(builders.find(name));
95 if(it!=builders.end()) {
101 ret = builder->connect(Impl::shared_pointer(internal_self), name,
requester);
118 :impl(new
Impl(name))
120 impl->internal_self = impl;
123 impl.reset(impl.get(), pva::Destroyable::cleaner(impl));
124 impl->external_self = impl;
133 Guard G(impl->mutex);
135 pvs.swap(impl->builders);
137 pvs = impl->builders;
140 for(Impl::builders_t::iterator it(pvs.begin()),
end(pvs.end()); it!=
end; ++it) {
141 it->second->disconnect(destroy, impl.get());
147 return Impl::shared_pointer(impl->internal_self);
151 const std::tr1::shared_ptr<ChannelBuilder>& builder)
153 Guard G(impl->mutex);
154 if(impl->builders.find(name)!=impl->builders.end())
155 throw std::logic_error(
"Duplicate PV name");
156 impl->builders[name] = builder;
161 std::tr1::shared_ptr<StaticProvider::ChannelBuilder> ret;
163 Guard G(impl->mutex);
164 Impl::builders_t::iterator it(impl->builders.find(name));
165 if(it!=impl->builders.end()) {
167 impl->builders.erase(it);
171 ret->disconnect(
true, impl.get());
176 Guard G(impl->mutex);
177 return impl->builders.begin();
181 Guard G(impl->mutex);
182 return impl->builders.end();
200 const std::tr1::shared_ptr<Handler>& handler)
204 REFTRACE_INCREMENT(num_instances);
207 REFTRACE_DECREMENT(num_instances);
215 virtual pva::ChannelFind::shared_pointer
channelFind(std::string
const & name,
220 pva::PeerInfo::const_shared_pointer info(
requester->getPeerInfo());
224 handler->hasChannels(search);
226 found = !search.empty() && search[0].name()==name && search[0].claimed();
235 handler->listChannels(names, dynamic);
239 virtual pva::Channel::shared_pointer
createChannel(std::string
const & name,
240 pva::ChannelRequester::shared_pointer
const &
requester,
243 pva::Channel::shared_pointer ret;
246 ret = handler->createChannel(ChannelProvider::shared_pointer(internal_self), name,
requester);
259 const std::tr1::shared_ptr<Handler> &handler)
260 :impl(new
Impl(name, handler))
262 impl->internal_self = impl;
265 impl.reset(impl.get(), pva::Destroyable::cleaner(impl));
266 impl->external_self = impl;
273 return impl->handler;
278 return Impl::shared_pointer(impl->internal_self);
std::tr1::weak_ptr< Impl > internal_self
A single client serach request. May be associated with more than one name.
virtual pva::ChannelFind::shared_pointer channelFind(std::string const &name, pva::ChannelFindRequester::shared_pointer const &requester) OVERRIDE FINAL
virtual std::string getProviderName() OVERRIDE FINAL
virtual pva::ChannelFind::shared_pointer channelList(pva::ChannelListRequester::shared_pointer const &requester) OVERRIDE FINAL
A holder for a contiguous piece of memory.
epicsGuard< epicsMutex > Guard
static Status error(const std::string &m)
Impl(const std::string &name)
std::vector< Search > search_type
virtual pva::ChannelFind::shared_pointer channelList(pva::ChannelListRequester::shared_pointer const &requester) OVERRIDE FINAL
POINTER_DEFINITIONS(StaticProvider)
static size_t num_instances
void close(bool destroy=false)
std::tr1::shared_ptr< epics::pvAccess::ChannelProvider > provider() const
Fetch the underlying ChannelProvider. Usually to build a ServerContext around.
pva::ChannelFind::shared_pointer finder
StaticProvider::builders_t builders_t
std::tr1::weak_ptr< Impl > external_self
const_iterator end() const
virtual std::string getProviderName() OVERRIDE FINAL
std::tr1::shared_ptr< epics::pvAccess::ChannelProvider > provider() const
Fetch the underlying ChannelProvider. Usually to build a ServerContext around.
virtual ~ChannelBuilder()
virtual void destroy() OVERRIDE FINAL
virtual void destroy() OVERRIDE FINAL
std::tr1::shared_ptr< ChannelBuilder > remove(const std::string &name)
const std::tr1::shared_ptr< Handler > handler
void push_back(param_type v)
APIs for the epicsMutex mutual exclusion semaphore.
epicsGuardRelease< epicsMutex > UnGuard
DynamicProvider(const std::string &name, const std::tr1::shared_ptr< Handler > &handler)
StaticProvider(const std::string &name)
Impl(const std::string &name, const std::tr1::shared_ptr< Handler > &handler)
const ChannelProcessRequester::weak_pointer requester
pva::ChannelFind::shared_pointer finder
static size_t num_instances
static ChannelFind::shared_pointer buildDummy(const std::tr1::shared_ptr< ChannelProvider > &provider)
void registerRefCounter(const char *name, const size_t *counter)
void registerRefTrackServer()
void add(const std::string &name, const std::tr1::shared_ptr< ChannelBuilder > &builder)
Add a PV (eg. SharedPV) to this provider.
virtual pva::Channel::shared_pointer createChannel(std::string const &name, pva::ChannelRequester::shared_pointer const &requester, short priority, std::string const &address) OVERRIDE FINAL
POINTER_DEFINITIONS(Impl)
virtual pva::ChannelFind::shared_pointer channelFind(std::string const &name, pva::ChannelFindRequester::shared_pointer const &requester) OVERRIDE FINAL
Handler::shared_pointer getHandler() const
virtual pva::Channel::shared_pointer createChannel(std::string const &name, pva::ChannelRequester::shared_pointer const &requester, short priority, std::string const &address) OVERRIDE FINAL
const_iterator begin() const
void reserve(size_t i)
Set array capacity.
std::tr1::weak_ptr< Impl > internal_self