23 #define epicsExportSharedSymbols 29 const std::tr1::shared_ptr<pvas::detail::SharedPut>
op;
31 PutOP(
const std::tr1::shared_ptr<pvas::detail::SharedPut>& op,
32 const pvd::PVStructure::const_shared_pointer& pvRequest,
33 const pvd::PVStructure::const_shared_pointer&
value,
35 :
Impl(pvRequest, value, changed)
38 pva::ChannelRequester::shared_pointer req(op->channel->getChannelRequester());
40 info = req->getPeerInfo();
51 return op->requester.lock();
58 throw std::logic_error(
"Put can't complete() with data");
63 throw std::logic_error(
"Operation already complete");
67 pva::ChannelPutRequester::shared_pointer req(op->requester.lock());
69 req->putDone(sts, op);
78 size_t SharedPut::num_instances;
80 SharedPut::SharedPut(
const std::tr1::shared_ptr<SharedChannel>& channel,
81 const requester_type::shared_pointer&
requester,
82 const pvd::PVStructure::const_shared_pointer &pvRequest)
93 channel->owner->puts.remove(
this);
109 pvd::PVStructure::shared_pointer
const & pvPutStructure,
110 pvd::BitSet::shared_pointer
const & putBitSet)
112 std::tr1::shared_ptr<SharedPV::Handler> handler;
113 pvd::PVStructure::shared_pointer realval;
123 requester_type::shared_pointer req(
requester.lock());
128 handler =
channel->owner->handler;
137 requester_type::shared_pointer req(
requester.lock());
139 req->putDone(sts, pva::ChannelPut::shared_pointer());
142 std::tr1::shared_ptr<PutOP> impl(
new PutOP(shared_from_this(),
pvRequest, realval, changed),
147 handler->onPut(
channel->owner, op);
163 }
else if(
channel->owner->current) {
174 requester_type::shared_pointer req(
requester.lock());
179 }
else if(!current) {
183 req->getDone(sts, shared_from_this(), current, changed);
virtual pva::Channel::shared_pointer getChannel()=0
void copyBaseToRequested(const PVStructure &base, const BitSet &baseMask, PVStructure &request, BitSet &requestMask) const
virtual void lastRequest() OVERRIDE FINAL
virtual void destroy() OVERRIDE FINAL
#define assert(exp)
Declare that a condition should be true.
static Status error(const std::string &m)
const requester_type::weak_pointer requester
pvd::PVRequestMapper mapper
PVStructurePtr buildRequested() const
static size_t num_instances
Mark external symbols and entry points for shared libraries.
virtual void put(epics::pvData::PVStructure::shared_pointer const &pvPutStructure, epics::pvData::BitSet::shared_pointer const &putBitSet) OVERRIDE FINAL
APIs for the epicsMutex mutual exclusion semaphore.
Impl(const pvd::PVStructure::const_shared_pointer &pvRequest, const pvd::PVStructure::const_shared_pointer &value, const pvd::BitSet &changed, int debugLvl=0)
const ChannelProcessRequester::weak_pointer requester
virtual pva::ChannelBaseRequester::shared_pointer getRequester()=0
const pvd::PVStructure::const_shared_pointer pvRequest
virtual void complete(const pvd::Status &sts, const epics::pvData::PVStructure *value)=0
Data interface for a structure,.
const std::tr1::shared_ptr< SharedChannel > channel
std::tr1::shared_ptr< PVStructure > PVStructurePtr
virtual std::tr1::shared_ptr< pva::Channel > getChannel() OVERRIDE FINAL
virtual void cancel() OVERRIDE FINAL
PVStructurePtr buildBase() const
std::tr1::shared_ptr< BitSet > BitSetPtr
virtual void get() OVERRIDE FINAL
ChannelPut::shared_pointer op
const StructureConstPtr & requested() const
void copyBaseFromRequested(PVStructure &base, BitSet &baseMask, const PVStructure &request, const BitSet &requestMask) const