00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00049 #ifndef TOPPERS_VMEMPOOL_HPP_
00050 #define TOPPERS_VMEMPOOL_HPP_
00051
00052 #include <toppers/object.hpp>
00053
00054 namespace toppers
00055 {
00056
00069 template <ID Id = 0,
00070 class Diagnostics = TOPPERS_DEFAULT_DIAGNOSTICS,
00071 class Stub = TOPPERS_DEFAULT_STUB >
00072 class vmempool : Diagnostics
00073 {
00074 typedef object_controller<Id, obj_vmempool, Stub> controller;
00075 object_id<Id> objid_;
00076
00077 public:
00078 typedef t_cmpl creation;
00079 typedef t_rmpl reference;
00080
00083
00085 vmempool() {}
00087 explicit vmempool(ID id) : objid_(id) {}
00088
00090 template <ID Id2, class Diagnostics2, class Stub2>
00091 vmempool(const vmempool<Id2, Diagnostics2, Stub2>& other)
00092 : objid_(get_unsafe_id(other))
00093 {
00094 TOPPERS_STATIC_ASSERT(Id == 0);
00095 }
00096
00098
00101
00102
00103 ER create(creation* pk_cobj)
00104 {
00105 ER ercd = controller::create(objid_, pk_cobj);
00106 return handle_error(ercd);
00107 }
00109 ER create(const creation* pk_cobj)
00110 {
00111 ER ercd = controller::create(objid_, pk_cobj);
00112 return handle_error(ercd);
00113 }
00115 ER create(ATR mplatr = TA_TFIFO, UINT mplsz = 1024, VP mpl = 0)
00116 {
00117 creation packet;
00118 packet.mplatr = mplatr;
00119 packet.mplsz = mplsz;
00120 packet.mpl = mpl;
00121 return create(&packet);
00122 }
00124 ER destroy()
00125 {
00126 ER ercd = controller::destroy(objid_);
00127 return handle_error(ercd);
00128 }
00129
00131
00134
00136 ER refer(reference* pk_robj) const
00137 {
00138 ER ercd = controller::refer(objid_, pk_robj);
00139 return handle_error(ercd);
00140 }
00141
00143
00146
00148 ER get(UINT blksz, VP* p_blk, forever_tag = forever) const
00149 {
00150 ER ercd = Stub::stub_get_mpl(objid_.id(), blksz, p_blk);
00151 return handle_error(ercd);
00152 }
00154 ER get(UINT blksz, VP* p_blk, polling_tag) const
00155 {
00156 ER ercd = Stub::stub_pget_mpl(objid_.id(), blksz, p_blk);
00157 return handle_error(ercd);
00158 }
00160 ER get(UINT blksz, VP* p_blk, TMO tmout) const
00161 {
00162 ER ercd = Stub::stub_tget_mpl(objid_.id(), blksz, p_blk, tmout);
00163 return handle_error(ercd);
00164 }
00165
00167 ER release(VP blk) const
00168 {
00169 ER ercd = Stub::stub_rel_mpl(objid_.id(), blk);
00170 return handle_error(ercd);
00171 }
00172
00174
00176 friend ID get_unsafe_id(const vmempool<Id, Diagnostics, Stub>& obj)
00177 {
00178 return obj.objid_.id();
00179 }
00180 };
00181
00182 }
00183
00184 #endif // ! TOPPERS_VMEMPOOL_HPP_