メインページ | モジュール | 名前空間一覧 | クラス階層 | 構成 | ファイル一覧 | 名前空間メンバ | 構成メンバ | ファイルメンバ | 関連ページ

toppers/fmempool.hpp

解説を見る。
00001 /*
00002  *  TOPPERS/C++ API Template Library
00003  *      Toyohashi Open Platform for Embedded Real-Time Systems/
00004  *      C++ API Template Library
00005  *
00006  *  Copyright (C) 2004 by TAKAGI Nobuhisa
00007  *
00008  *  上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation
00009  *  によって公表されている GNU General Public License の Version 2 に記
00010  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
00011  *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
00012  *  利用と呼ぶ)することを無償で許諾する.
00013  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
00014  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
00015  *      スコード中に含まれていること.
00016  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
00017  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
00018  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
00019  *      の無保証規定を掲載すること.
00020  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
00021  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
00022  *      と.
00023  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
00024  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
00025  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
00026  *        報告すること.
00027  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
00028  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
00029  *
00030  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
00031  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
00032  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
00033  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
00034  *
00035  *  @(#) $Id: fmempool.hpp,v 1.1.1.1 2004/04/14 09:30:28 takagi-n Exp $
00036  */
00037 
00049 #ifndef TOPPERS_FMEMPOOL_HPP_
00050 #define TOPPERS_FMEMPOOL_HPP_
00051 
00052 #include <toppers/object.hpp>
00053 
00054 namespace toppers
00055 {
00056 
00067     template <ID Id = 0,
00068               class Diagnostics = TOPPERS_DEFAULT_DIAGNOSTICS,
00069               class Stub = TOPPERS_DEFAULT_STUB >
00070     class fmempool : Diagnostics
00071     {
00072         typedef object_controller<Id, obj_fmempool, Stub> controller;
00073         object_id<Id> objid_;
00074 
00075     public:
00076         typedef t_cmpf creation;
00077         typedef t_rmpf reference;
00078 
00081 
00083         fmempool() {}
00085         explicit fmempool(ID id) : objid_(id) {}
00086 
00088         template <ID Id2, class Diagnostics2, class Stub2>
00089         fmempool(const fmempool<Id2, Diagnostics2, Stub2>& other)
00090             : objid_(get_unsafe_id(other))
00091         {
00092             TOPPERS_STATIC_ASSERT(Id == 0);
00093         }
00094 
00096 
00099 
00100         //  互換性のための多重定義
00101         ER create(creation* pk_cobj)
00102         {
00103             ER ercd = controller::create(objid_, pk_cobj);
00104             return handle_error(ercd);
00105         }
00107         ER create(const creation* pk_cobj)
00108         {
00109             ER ercd = controller::create(objid_, pk_cobj);
00110             return handle_error(ercd);
00111         }
00113         ER create(ATR mpfatr = TA_TFIFO, UINT blkcnt = 32, UINT blksz = 32, VP mpf = 0)
00114         {
00115             creation packet;
00116             packet.mpfatr = mpfatr;
00117             packet.blkcnt = blkcnt;
00118             packet.blksz  = blksz;
00119             packet.mpf    = mpf;
00120             return create(&packet);
00121         }
00123         ER destroy()
00124         {
00125             ER ercd = controller::destroy(objid_);
00126             return handle_error(ercd);
00127         }
00128 
00130 
00133 
00135         ER refer(reference* pk_robj) const
00136         {
00137             ER ercd = controller::refer(objid_, pk_robj);
00138             return handle_error(ercd);
00139         }
00140 
00142 
00145 
00147         ER get(VP* p_blk, forever_tag = forever) const
00148         {
00149             ER ercd = Stub::stub_get_mpf(objid_.id(), p_blk);
00150             return handle_error(ercd);
00151         }
00153         ER get(VP* p_blk, polling_tag) const
00154         {
00155             ER ercd = Stub::stub_pget_mpf(objid_.id(), p_blk);
00156             return handle_error(ercd);
00157         }
00159         ER get(VP* p_blk, TMO tmout) const
00160         {
00161             ER ercd = Stub::stub_tget_mpf(objid_.id(), p_blk, tmout);
00162             return handle_error(ercd);
00163         }
00164 
00166         ER get(UINT, VP* p_blk, forever_tag = forever) const
00167         {
00168             return get(p_blk, forever);
00169         }
00171         ER get(UINT, VP* p_blk, polling_tag) const
00172         {
00173             return get(p_blk, polling);
00174         }
00176         ER get(UINT, VP* p_blk, TMO tmout) const
00177         {
00178             return get(p_blk, tmout);
00179         }
00180 
00182         ER release(VP blk) const
00183         {
00184             ER ercd = Stub::stub_rel_mpf(objid_.id(), blk);
00185             return handle_error(ercd);
00186         }
00187 
00189 
00191         friend ID get_unsafe_id(const fmempool<Id, Diagnostics, Stub>& obj)
00192         {
00193             return obj.objid_.id();
00194         }
00195     };
00196 
00197 }
00198 
00199 #endif  // ! TOPPERS_FMEMPOOL_HPP_