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

toppers/dataqueue.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: dataqueue.hpp,v 1.1.1.1 2004/04/14 09:30:28 takagi-n Exp $
00036  */
00037 
00049 #ifndef TOPPERS_DATAQUEUE_HPP_
00050 #define TOPPERS_DATAQUEUE_HPP_
00051 
00052 #include <toppers/object.hpp>
00053 
00054 namespace toppers
00055 {
00056 
00065     template <ID Id = 0,
00066               class Diagnostics = TOPPERS_DEFAULT_DIAGNOSTICS,
00067               class Stub = TOPPERS_DEFAULT_STUB >
00068     class dataqueue : Diagnostics
00069     {
00070         typedef object_controller<Id, obj_dataqueue, Stub>  controller;
00071         object_id<Id> objid_;
00072 
00073     public:
00075         typedef t_cdtq creation;
00077         typedef t_rdtq reference;
00078 
00081 
00083         dataqueue() {}
00085         explicit dataqueue(ID id) : objid_(id) {}
00086 
00088         template <ID Id2, class Diagnostics2, class Stub2>
00089         dataqueue(const dataqueue<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 dtqatr = TA_TFIFO, UINT dtqcnt = 0, VP dtq = 0)
00114         {
00115             creation packet;
00116             packet.dtqatr;
00117             packet.dtqcnt;
00118             packet.dtq;
00119             return create(&packet);
00120         }
00122         ER destroy()
00123         {
00124             ER ercd = controller::destroy(objid_);
00125             return handle_error(ercd);
00126         }
00127 
00129 
00132 
00134         ER refer(reference* pk_robj) const
00135         {
00136             ER ercd = controller::refer(objid_, pk_robj);
00137             return handle_error(ercd);
00138         }
00139 
00141 
00144 
00146         ER send(VP_INT data, forever_tag = forever, task_context_tag = task_context) const
00147         {
00148             ER ercd = Stub::stub_snd_dtq(objid_.id(), data);
00149             return handle_error(ercd);
00150         }
00152         ER send(VP_INT data, polling_tag, task_context_tag = task_context) const
00153         {
00154             ER ercd = Stub::stub_psnd_dtq(objid_.id(), data);
00155             return handle_error(ercd);
00156         }
00158         ER send(VP_INT data, TMO tmout, task_context_tag = task_context) const
00159         {
00160             ER ercd = Stub::stub_tsnd_dtq(objid_.id(), data, tmout);
00161             return handle_error(ercd);
00162         }
00164         ER send(VP_INT data, forced_tag, task_context_tag = task_context) const
00165         {
00166             ER ercd = Stub::stub_fsnd_dtq(objid_.id(), data);
00167             return handle_error(ercd);
00168         }
00170         ER send(VP_INT data, polling_tag, non_task_context_tag) const
00171         {
00172             ER ercd = Stub::stub_ipsnd_dtq(objid_.id(), data);
00173             return handle_error(ercd);
00174         }
00176         ER send(VP_INT data, forced_tag, non_task_context_tag) const
00177         {
00178             ER ercd = Stub::stub_ifsnd_dtq(objid_.id(), data);
00179             return handle_error(ercd);
00180         }
00182         ER send(VP_INT data, polling_tag, context_independent_tag) const
00183         {
00184             ER ercd;
00185             if (Stub::stub_sns_ctx())
00186                 ercd = Stub::stub_ipsnd_dtq(objid_.id(), data);
00187             else
00188                 ercd = Stub::stub_psnd_dtq(objid_.id(), data);
00189             return handle_error(ercd);
00190         }
00192         ER send(VP_INT data, forced_tag, context_independent_tag) const
00193         {
00194             ER ercd;
00195             if (Stub::stub_sns_ctx())
00196                 ercd = Stub::stub_ifsnd_dtq(objid_.id(), data);
00197             else
00198                 ercd = Stub::stub_fsnd_dtq(objid_.id(), data);
00199             return handle_error(ercd);
00200         }
00201 
00203         ER receive(VP_INT* p_data, forever_tag = forever) const
00204         {
00205             ER ercd = Stub::stub_rcv_dtq(objid_.id(), p_data);
00206             return handle_error(ercd);
00207         }
00209         ER receive(VP_INT* p_data, polling_tag) const
00210         {
00211             ER ercd = Stub::stub_prcv_dtq(objid_.id(), p_data);
00212             return handle_error(ercd);
00213         }
00215         ER receive(VP_INT* p_data, TMO tmout) const
00216         {
00217             ER ercd = Stub::stub_trcv_dtq(objid_.id(), p_data, tmout);
00218             return handle_error(ercd);
00219         }
00220 
00222 
00224         friend ID get_unsafe_id(const dataqueue<Id, Diagnostics, Stub>& obj)
00225         {
00226             return obj.objid_.id();
00227         }
00228     };
00229 
00230 }
00231 
00232 #endif  // ! TOPPERS_DATAQUEUE_HPP_