source: anotherchoice/tags/jsp-1.4.4-full-UTF8/cfg/base/component.h@ 26

Last change on this file since 26 was 26, checked in by ykominami, 10 years ago

initial

File size: 7.9 KB
Line 
1/*
2 * TOPPERS/JSP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Just Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 *
9 * 上記著作権者
10は,以下の (1)〜(4) の条件か,Free Software Foundation
11 * によってå…
12¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
13 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
14 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
15å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
16 * 利用と呼ぶ)することを無償で許諾する.
17 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
18 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
19 * スコード中に含まれていること.
20 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
21 * 用できる形で再é…
22å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
23å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
24 * 者
25マニュアルなど)に,上記の著作権表示,この利用条件および下記
26 * の無保証規定を掲載すること.
27 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
28 * 用できない形で再é…
29å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
30 * と.
31 * (a) 再é…
32å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
33マニュアルなど)に,上記の著
34 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
35 * (b) 再é…
36å¸ƒã®å½¢æ…
37‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
38 * 報告すること.
39 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
40 * 害からも,上記著作権者
41およびTOPPERSプロジェクトをå…
42è²¬ã™ã‚‹ã“と.
43 *
44 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
45お
46 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
47 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
48 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
49 *
50 * @(#) $Id: component.h,v 1.8 2003/12/20 06:51:58 takayuki Exp $
51 */
52
53// $Header: /home/CVS/configurator/base/component.h,v 1.8 2003/12/20 06:51:58 takayuki Exp $
54
55#include "base/testsuite.h"
56#include "base/singleton.h"
57#include "base/except.h"
58#include "base/message.h"
59#include "base/option.h"
60#include "base/collection.h"
61#include "base/directorymap.h"
62
63#include <list>
64#include <map>
65
66#ifndef COMPONENT_H
67#define COMPONENT_H
68
69class Component : public RuntimeObject
70{
71public:
72 //コンポーネントの起動優å…
73ˆåº¦
74 enum tagProcessStage {
75 INITIALIZE, //とにかく真っå…
76ˆã«å‹•ããŸã„処理
77
78 BEFORE_PARSE, //パース前
79 PARSER, //パーサ
80 AFTER_PARSE, //パース後
81
82 PREDECESSOR, //汎用の前
83 GENERAL_PURPOSE, //汎用
84 SUCCESSOR, //汎用の後
85
86 BEFORE_CODEGENERATION, //コード生成前
87 CODEGENERATOR, //コード生成
88 AFTER_CODEGENERATION, //コード生成後
89
90 FINALIZE
91 };
92
93 //コンポーネントにå…
94±é€šã®ãƒ‡ãƒ¼ã‚¿ã‚’持つ/操作するクラス
95 class ComponentInfo
96 {
97 protected:
98 std::string banner;
99 std::multimap<int, Component *> componentList;
100 std::list<Component *> activatedComponentList;
101
102 //コンストラクタ (テスト用)
103 ComponentInfo(void) throw() {}
104 public:
105 //コンストラクタ
106 SINGLETON_CONSTRUCTOR(ComponentInfo) {}
107
108 //コンポーネントの追加
109 bool addComponent(Component * component, int order) throw();
110
111 //コンポーネントの登録解除
112 void removeComponent(Component * component, int order) throw(); //特定の優å…
113ˆåº¦ã ã‘を解除
114 void removeComponent(Component * component) throw(); //å…
115¨ã¦è§£é™¤
116
117 //コンポーネントの起動要求
118 bool activateComponent(Component * component) throw();
119
120 //オプションのパース
121 void parseOption(OptionParameter & option);
122
123 //コンポーネントの起動
124 void activateComponent(void);
125
126 //異常処理ハンドラの起動
127 void onFatalExit(void);
128
129 //コンポーネントTが起動しているかを判定
130 template<class T>
131 bool isActive(void) const throw()
132 {
133 std::list<Component *>::const_iterator scope;
134
135 scope = activatedComponentList.begin();
136 while(scope != activatedComponentList.end()) {
137 if(dynamic_cast<T *>(*scope) != 0)
138 return true;
139 ++ scope;
140 }
141 return false;
142 }
143
144 //バナー変数へのアクセサ
145 inline void setBanner(std::string src)
146 { banner = src; }
147 inline std::string getBanner(void) const
148 { return banner; }
149
150
151 TESTSUITE_PROTOTYPE(main)
152 };
153
154
155protected:
156 static bool is_valid; //コンポーネントの初期化に成功したかどうかを持つフラグ
157
158 /*
159 * 作業関数
160 */
161
162 //コンポーネントの起動
163 inline bool activateComponent(void) throw()
164 { return Singleton<ComponentInfo>::getInstance()->activateComponent(this); }
165
166 //一般的なオプションの処理
167 static void _parseCommonOption(OptionParameter & option) throw();
168
169
170 //自分にå…
171ˆè¡Œã™ã‚‹ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã®èµ·å‹•åˆ¤å®š
172 template<class T>
173 static bool isActive(void) throw()
174 {
175 bool result = false;
176 ComponentInfo * info = Singleton<ComponentInfo>::getInstance(std::nothrow);
177 if(info != 0)
178 result = info->isActive<T>();
179 return result;
180 }
181
182
183 /*
184 * 過去との互換性のためのパラメータ操作API
185 */
186
187 static bool findOption (const char * key1, const char * key2 = 0, std::string * = 0) throw();
188 static bool checkOption(const char * key1, const char * key2 = 0) throw();
189 static OptionParameter::OptionItem getOption (const char * key1, const char * key2 = 0, bool dirty = true) throw();
190 static OptionParameter::OptionItem mergeOption(const char * key1, const char * key2 = 0) throw();
191
192public:
193 //コンストラクタ
194 Component(int order = GENERAL_PURPOSE) throw();
195
196 //デストラクタ
197 virtual ~Component(void) throw();
198
199 //有効判定
200 static bool isValid(void) throw()
201 { return is_valid && SingletonBase::isValid(); }
202
203 //コンポーネントの実行
204 static void executeComponents(OptionParameter & option);
205 static void executeComponents(int argc, char * argv []);
206
207 //バナーアクセサ
208 static void setBanner(std::string) throw(std::bad_alloc);
209 static std::string getBanner(void) throw(std::bad_alloc);
210
211 /*
212 * イベントハンドラ
213 */
214
215 //オプションのパース
216 virtual void parseOption(OptionParameter &)
217 { parseOption(*Singleton<Directory>::getInstance()); }
218
219 virtual void parseOption(Directory &) {}
220
221 //コンポーネントの本体
222 virtual void body(void) { body(*Singleton<Directory>::getInstance()); }
223 virtual void body(Directory &) {}
224
225 //異常終了ハンドラ
226 virtual void onFatalExit(void) {}
227
228
229
230 TESTSUITE_PROTOTYPE(main)
231};
232
233
234#endif
235
236
237
Note: See TracBrowser for help on using the repository browser.