This commit is contained in:
Michael Davidsaver
2016-03-18 12:34:32 -04:00
parent 3dd40dcf76
commit 7d150cc7ad
4 changed files with 108 additions and 0 deletions

View File

@ -405,4 +405,35 @@ public:
}
};
template<class CP>
struct BaseChannelProviderFactory : epics::pvAccess::ChannelProviderFactory
{
typedef CP provider_type;
std::string name;
epicsMutex lock;
std::tr1::weak_ptr<CP> last_shared;
BaseChannelProviderFactory(const char *name) :name(name) {}
virtual ~BaseChannelProviderFactory() {}
virtual std::string getFactoryName() { return name; }
virtual epics::pvAccess::ChannelProvider::shared_pointer sharedInstance()
{
epicsGuard<epicsMutex> G(lock);
std::tr1::shared_ptr<CP> ret(last_shared.lock());
if(!ret) {
ret.reset(new CP());
last_shared = ret;
}
return ret;
}
virtual epics::pvAccess::ChannelProvider::shared_pointer newInstance(const std::tr1::shared_ptr<epics::pvAccess::Configuration>&)
{
std::tr1::shared_ptr<CP> ret(new CP());
return ret;
}
};
#endif // PVAHELPER_H