           mITRON4.0 ե졼 C++饹饤֥ 

                   (Release 0.0б, ǽ: 2-Nov-2000)


-----------------------------------------------------------------------
  TOPPERS/JSP Kernel
      Toyohashi Open Platform for Embedded Real-Time Systems/
      Just Standard Profile Kernel
 
  Copyright (C) 2000 by Embedded and Real-Time Systems Laboratory
                              Toyohashi Univ. of Technology, JAPAN
 
  嵭Ԥϡʲξ˸¤ꡤܥեȥܥ
  եȥѤΤޤࡥʲƱˤѡʣѡ
  ۡʰʲѤȸƤ֡ˤ뤳Ȥ̵ǵ롥
  (1) ܥեȥ򥽡ɤηѤˤϡ嵭
      ɽѾ浪Ӳ̵ݾڵ꤬Τޤޤηǥ
      ˴ޤޤƤ뤳ȡ
  (2) ܥեȥХʥꥳɤηޤϵȤ߹
      ѤˤϡΤ줫ξȡ
    (a) ѤȼɥȡѼԥޥ˥奢ʤɡˤˡ嵭
        ɽѾ浪Ӳ̵ݾڵǺܤ뤳ȡ
    (b) Ѥη֤̤ˡˤäơ嵭Ԥ𤹤
        ȡ
  (3) ܥեȥѤˤľŪޤϴŪ뤤ʤ»
      ⡤嵭Ԥդ뤳ȡ
 
  ܥեȥϡ̵ݾڤ󶡤ƤΤǤ롥嵭Ԥϡ
  ܥեȥ˴ؤơŬѲǽޤơʤݾڤԤ
  ʤޤܥեȥѤˤľŪޤϴŪ
  ʤ»˴ؤƤ⡤Ǥʤ
-----------------------------------------------------------------------

ΥɥȤTOPPERS/JSP°륳ե졼¤ȼΥե졼ݤɬפȤʤ륯饹饤֥ե󥹤Ǥ롣Ǥϥ饹λỊ̇ƴؿλȤʤɤβԤ




饹å

mITRON4.0ե졼C++饹饤֥(ʲ ե졼饤֥)ǤϡΤ褦ʥ饹Ƥ롣

ID				: IDδԤ
Varient			: ʸ̤鷺˰ѿ
Array			: Valient
Exception		: 㳰
Manager			: ץ
MultiStream		: ʣνϥե륯饹
Parser			: եΥѡ󥰤Ԥ饹
StaticAPI		: ŪAPIΥ١饹
Serializer		: եϤԤ饹

ƥ饹ξܺ

 ID

IDmITRONͤ˽򤹤褦IDͤδԤ饹Ǥ롣

󥹥ȥ饯
	ID(const long Size = 255);
	explicit ID(long Lower, unsigned long Size = 255);
	explicit ID(long Lower, long Upper = 255);

	1ܤͭIDͤθĿͿID롣Ǿͤ1Ǥ롣
	2ܤϺǾͤȸĿͿID롣
	3ܤϺǾͤȺͤͿID롣
		#IDϥԡ󥹥ȥ饯ʤID򥳥ԡǽȤ뤳
		#Ȥǳ֥ȤID꤬Τ򤱤뤿Ǥ롣

ͤγ
	bool Assign(long id);

	id(ͽ)롣ʸidϲޤѽʤʤ롣
	ͤγ硢ؿtrue֤ͤѤǤʤϰϤǤ硢
	ͤǤѤƤ硢ؿfalse֤

ͤβ
	bool Resign(long id);

	id롣
	ͤβ硢ؿtrue֤
	ͤϰϳޤϳѤߤ̵硢ؿfalse֤

ͤγǧ
	bool IsAssigned(long id);
	bool operator [](long);
	
	idǤ˳ƤƤ뤫ɤ롣
	ͤǤ˳ѤߤǤ硢ؿtrue֤
	ͤϰϳޤϳƤʤ硢ؿfalse֤

ͤϰϼ
	long GetMaxID(void);
	long GetMinID(void);

	GetMaxIDϳѤIDκ֤ͤ
	GetMinIDϳѤIDκǾ֤ͤ
	ѤID̵ ޤ ͤϰϳǤ硢GetMaxIDϺǾ-1
	GetMinIDϺ+1֤

ѤIDθĿμ
	unsigned long GetCount(void);
	operator const unsigned long(void);

	Ǥ˳ƤIDο֤

IDֹμ
	long GetNewID(void);
	
	ѲǽǤäȤ⾮IDֹ֤
	δؿǤͤγϹԤʤ

IDͤȽ
	bool IsAvailable(void);
	operator const bool(void);

	ε˽IDͤƤƤ뤫Ƚꤹ롣
	true򡢤Ǥʤfalse֤

	
		1. IDͤϢ³ǤʤФʤʤ
		2. IDͤͭϰǤʤФʤʤ
		3. IDͤϺǾͤϤޤʤФʤʤ

 Valient

Valientʸ͡ưʤɤͤޤȤƴ뤿ηǤ
 (VisualBASICany)

̻
	enum Valient::tagType
		INTEGER		: 
		DOUBLE		: ư
		STRING		: ʸ
		POINTER		: ݥ

󥹥ȥ饯
	Valient(void);
	Valient(const Valient &);
	Valient(int);
	explicit Valient(unsigned int);
	Valient(double);
	explicit Valient(char *);
	Valient(void *);

	1ܤ϶Valient롣
	2ܤϥԡ󥹥ȥ饯Ǥ롣
	ʹ ĤΤϤ줾ͤȤ륳󥹥ȥ饯Ǥ롣

ͤ
	bool Set(int);
	bool Set(unsigned int);
	bool Set(double);
	bool Set(char *);
	bool Set(void *);

	ݻƤͤꤵ줿ͤݻ롣
	ؿǤtrue򡢤Ǥʤfalse֤

ͤμ
	int GetInteger(int =0);
	char * GetString(char * =0l);
	double GetDouble(double =0.0);
	void * GetPointer(void * =0l);

	ݻƤͤ롣
	ؿݻƤ뷿ʤ硢ȤͿ줿֤ͤ

ͤζ
	bool Clear(void);

	ݻƤͤŪ˲롣

ͤημ
	enum tagType GetType(void);
	operator const enum tagType(void);

	ݻƤͤη롣

ͤη
	bool operator ==(enum tagType);

	ݻƤͤηӤԤ
	פtrueǤʤfalse֤

 Array

ArrayValientݻԤ


	enum Array::tagType
		EMPTY	: Ǥ϶Ǥ
		ARRAY	: Ǥ(Array)Ǥ
		VALUE	: Ǥ(Valient)Ǥ

󥹥ȥ饯
	Array(void);
	Array(const Array &);

	1ܤ϶롣
	2ܤϥԡ󥹥ȥ饯Ǥ롣

Ǥؤͤ
	bool Set(unsigned int pos, Valient & val);
	bool Set(unsigned int pos, Valient * val);

	posǼǤvalꤹ롣
	pos¸Ǥͤѹ̵ϿposޤǤ
	ư롣posʳμư줿ǤȤ϶(Array::EMPTY)Ǥ롣
	1ܤϥԡǤꤹ롣
	2ܤϤΤΤǤȤꤷ˴Array饹Ԥ
	)ݥϤValientư˴ȼ¹Ի顼Ȥʤ
	
	bool Set(unsigned int pos,Array & ary);
	bool Set(unsigned int pos,Array * ary);

	posǼǤaryꤹ롣
	pos¸Ǥͤѹ̵ϿposޤǤ
	ư롣posʳμư줿ǤȤ϶(Array::EMPTY)Ǥ롣
	1ܤϥԡǤꤹ롣
	2ܤϤΤΤǤȤꤷ˴Array饹Ԥ
	)ݥϤArrayư˴ȼ¹Ի顼Ȥʤ


ValientǤΥݥ󥿼
	Valient * GetValuePtr(unsigned int pos);
	
	posǼǤͤؤΥݥ󥿤롣
	posϰϳޤposǼǤ̵ͤä硢
	ؿ(Valient *)0l֤

ArrayǤΥݥ󥿼
	Array * GetArrayPtr(unsigned int pos)

	posǼǤؤΥݥ󥿤롣
	posϰϳޤposǼǤ̵ä硢
	ؿ(Array *)0l֤

Ǥημ
	tagType GetType(unsigned int pos);
	
	posǼǤη֤
	posϰϳǤäArray::EMPTY֤

Ǥͤؤλ
	Valient & operator [](unsigned int pos);

	posǼǤͤؤλȤ롣
	)ܴؿposϰϳǤ뤫ɤǧʤ

ǤǤ뤳Ȥγǧ
	bool IsArray(unsigned int pos)
	
	posǤätrue֤
	ǤʤposͭϰϳǤäfalse֤

Ǥομ
	unsigned int Size(void);

	Ǥο롣

Ǥ
	bool Clear(void);

	Ǥ˴롣

 Exception

Exceptionϥե졼饤֥ǰӤѤ㳰Ѥ
饹Ǥ롣

󥹥ȥ饯
	Exception(void) 
	Exception(const char * src)
	Exception(const std::string & src)
	Exception(const Exception & src)

	1ܤ"Υ顼"Ȥܺپ㳰饹롣
	23ܤϤ줾ܺپȤ㳰饹롣
	4ܤϥԡ󥹥ȥ饯Ǥ롣

ܺپμ
	virtual std::string & GetReason(void) 
	operator const char * (void)
	operator const std::string & (void)
	
	ܺپ롣
	)2ĤΥڥ졼GetReasonؿ¹Ԥ롣

 Manager

ManagerܥץˤȤʤ륯饹Ǥ롣

APIϿ
	void DeclareAPI(void);
	void DeclareAPI(class StaticAPI *);

	ŪAPIϿ롣ܺ٤ϸҤ롣

ꥢ饤Ͽ
	void DeclareSerializer(void);
	void DeclareSerializer(class Serializer *);

	ꥢ饤Ͽ롣ܺ٤ϸҤ롣

󥹥ȥ饯
	Manager(class Parser * p);

	ŪAPIեѡpѤƥ饹롣
	ѡpManagerưǺ롣

ץ
	bool Body(char * filename);
	
	ե졼եfilenameФƽԤ
	

MultiStream		: ʣνϥե륯饹
Parser			: եΥѡ󥰤Ԥ饹
StaticAPI		: ŪAPIΥ١饹
Serializer		: եϤԤ饹



ưǰ

 StaticAPISerializer

ե졼饤֥ǤϥեȽ2Ĥʤ롣
ΤStaticAPI饹ǤꡢΤSerializer
饹Ǥ롣

StaticAPI饹ɤ߹ѥ᡼ʬ򤷡ͤǤ뤫ɤǧ
ɬפǤͤƤȤô
Serializer饹Ͻ˽Ϥ٤ǧǤȽǤ
ФξϤȤô

ץμή
	1. ե졼ɤ߽Ф
		бStaticAPI::BodyθƤӽФ
	2. ꥢ饤Фϥå
	3. ꥢ饤Ф
3ʳǹԤ롣

ξΥ饹ȤManager::DeclareXXXؿˤϿԤ

Manager::DeclareAPI(void)ǤStaticAPIԤDeclareAPIǤMana
ger::DeclareAPI(StaticAPI &)ѤStaticAPI饹Υ󥹥󥹤Manager
Ͽ뤳ȤǹԤƱAPIʣϿȥ顼Ȥʤ롣


void Manager::DeclareAPI(void)
{
	DeclareAPI(task.API_CRE_TSK);
	DeclareAPI(task.API_DEF_TEX);
	....
	DeclareAPI(initializehandler.API_ATT_INI);
}

Manager::DeclareSerializer(void)Ǥϥꥢ饤ԤDeclareSerializer(Serializer &)ѤSerializer饹Υ󥹥󥹤ManagerϿ뤳ȤǹԤꥢ饤θƤӽФϿ˹Ԥ롣Ʊ쥷ꥢ饤ʣϿ뤳ȤǽǤ뤬ξϥåϿʣ¹Ԥ롣


void Manager::DeclareSerializer(void)
{
	DeclareSerializer(&misc);
	DeclareSerializer(&task);
	DeclareSerializer(&semaphore);
	...
	DeclareSerializer(&initializehandler);
	DeclareSerializer(&misc);
}


APIκˡ

API뤿ˤϡκȤɬפȤʤ롣
	1. ŪAPI饹κ
	2. ꥢ饤κ
	3. Manager::DeclareAPIκ
	4. Manager::DeclareSerializerκ

 ŪAPI饹

ŪAPI饹StaticAPI饹뤳ȤǤ롣

StaticAPI::GetAPINameϥե졼եѤAPI̾
롣ManagerϤȤ˽ΥǥѥåԤŪAPI̾Τ
ʸ§Ȥ롣

StaticAPI::Bodyϥե졼ؿǤ롣

 - INCLUDEʸStaticAPI饹
class INCLUDE : public StaticAPI
{
public:
	char * GetAPIName(void) { return "INCLUDE"; };
	void Body(Array &);
};

ǹԤΥޥ¸ߤ롣
	DECLARE_API( API̾ )
	DECLARE_APIޥ¾Υ饹API_xxxȤŪAPI饹롣





ѵ
ܥץTOPPERS/JSPΰǤ롣ѵϸ§ȤTOPPERS/JSP
Τ˽


