\r
void NyLPC_cMiMicDbCompiler_initialize(NyLPC_TcMiMicDbCompiler_t* i_inst)\r
{\r
- i_inst->_bc_fragment_len=0;\r
+ i_inst->_bc_fragment_len=0;\r
}\r
\r
/**\r
*/\r
NyLPC_TcMiMicDbCompiler_RET NyLPC_cMiMicDbCompiler_compileFragment(NyLPC_TcMiMicDbCompiler_t* i_inst,const struct NyLPC_TCharArrayPtr* i_bc,NyLPC_TUInt32* o_val,NyLPC_TUInt16* o_parsed_bc)\r
{\r
- int i;\r
- NyLPC_TUInt8 c=i_inst->_bc_fragment_len;\r
- if(c==0 && i_bc->len>=8){\r
- //キャッシュ0でソースが十分あるときは直接変換\r
- if(NyLPC_mimicvm_txt2UInt(i_bc->ptr,8,o_val)){\r
- *o_parsed_bc=8;\r
- return NyLPC_TcMiMicDbCompiler_RET_OK;\r
- }else{\r
- i_inst->error_reason=NyLPC_TcMiMicDbCompiler_ERROR_FORMAT;\r
- return NyLPC_TcMiMicDbCompiler_RET_ERROR;\r
- }\r
- }else{\r
- //キャッシュが0でなければ、パディングして変換\r
- for(i=0;i<i_bc->len;i++){\r
- i_inst->_tmp[c]=i_bc->ptr[i];\r
- c++;\r
- //8個のバイトコードが溜まったら変換\r
- if(c==8){\r
- i_inst->_bc_fragment_len=0;\r
- if(NyLPC_mimicvm_txt2UInt(i_inst->_tmp,8,o_val)){\r
- *o_parsed_bc=i+1;//見チェック\r
- return NyLPC_TcMiMicDbCompiler_RET_OK;\r
- }else{\r
- i_inst->error_reason=NyLPC_TcMiMicDbCompiler_ERROR_FORMAT;\r
- return NyLPC_TcMiMicDbCompiler_RET_ERROR;\r
- }\r
- }\r
- }\r
- i_inst->_bc_fragment_len=c;\r
- *o_parsed_bc=i_bc->len;\r
- return NyLPC_TcMiMicDbCompiler_RET_CONTINUE;\r
- }\r
+ int i;\r
+ NyLPC_TUInt8 c=i_inst->_bc_fragment_len;\r
+ if(c==0 && i_bc->len>=8){\r
+ //キャッシュ0でソースが十分あるときは直接変換\r
+ if(NyLPC_mimicvm_txt2UInt(i_bc->ptr,8,o_val)){\r
+ *o_parsed_bc=8;\r
+ return NyLPC_TcMiMicDbCompiler_RET_OK;\r
+ }else{\r
+ i_inst->error_reason=NyLPC_TcMiMicDbCompiler_ERROR_FORMAT;\r
+ return NyLPC_TcMiMicDbCompiler_RET_ERROR;\r
+ }\r
+ }else{\r
+ //キャッシュが0でなければ、パディングして変換\r
+ for(i=0;i<i_bc->len;i++){\r
+ i_inst->_tmp[c]=i_bc->ptr[i];\r
+ c++;\r
+ //8個のバイトコードが溜まったら変換\r
+ if(c==8){\r
+ i_inst->_bc_fragment_len=0;\r
+ if(NyLPC_mimicvm_txt2UInt(i_inst->_tmp,8,o_val)){\r
+ *o_parsed_bc=i+1;//見チェック\r
+ return NyLPC_TcMiMicDbCompiler_RET_OK;\r
+ }else{\r
+ i_inst->error_reason=NyLPC_TcMiMicDbCompiler_ERROR_FORMAT;\r
+ return NyLPC_TcMiMicDbCompiler_RET_ERROR;\r
+ }\r
+ }\r
+ }\r
+ i_inst->_bc_fragment_len=c;\r
+ *o_parsed_bc=i_bc->len;\r
+ return NyLPC_TcMiMicDbCompiler_RET_CONTINUE;\r
+ }\r
}\r
/**\r
* MiMicDBフラグメントを1文字パースします。\r
*/\r
NyLPC_TcMiMicDbCompiler_RET NyLPC_cMiMicDbCompiler_compileFragment2(NyLPC_TcMiMicDbCompiler_t* i_inst,NyLPC_TChar i_bc,NyLPC_TUInt32* o_val)\r
{\r
- struct NyLPC_TCharArrayPtr bc;\r
- NyLPC_TUInt16 l;\r
- bc.ptr=&i_bc;\r
- bc.len=1;\r
- return NyLPC_cMiMicDbCompiler_compileFragment(i_inst,&bc,o_val,&l);\r
+ struct NyLPC_TCharArrayPtr bc;\r
+ NyLPC_TUInt16 l;\r
+ bc.ptr=&i_bc;\r
+ bc.len=1;\r
+ return NyLPC_cMiMicDbCompiler_compileFragment(i_inst,&bc,o_val,&l);\r
}\r
\r
/**\r
*/\r
NyLPC_TUInt16 NyLPC_cMiMicDbCompiler_compile(NyLPC_TcMiMicDbCompiler_t* i_inst,const struct NyLPC_TCharArrayPtr* i_bc,struct NyLPC_TUInt32ArrayPtr* o_val)\r
{\r
- struct NyLPC_TUInt32ArrayPtr wp=*o_val;\r
- struct NyLPC_TCharArrayPtr rp=*i_bc;\r
- NyLPC_TUInt16 s;\r
- NyLPC_Assert(i_bc->len>0);\r
- while(i_bc->len>0){\r
- //空き領域チェック\r
- if(wp.len==0){\r
- //空き領域不足\r
- i_inst->error_reason=NyLPC_TcMiMicDbCompiler_ERROR_OUT_BUFFER_TOO_SHORT;\r
- return 0;\r
- }\r
- switch(NyLPC_cMiMicDbCompiler_compileFragment(i_inst,&rp,o_val->ptr,&s)){\r
- case NyLPC_TcMiMicDbCompiler_RET_OK:\r
- //入力ポインタの移動\r
- if(!NyLPC_TCharArrayPtr_seek(&rp,s)){\r
- return 0;\r
- }\r
- //出力ポインタの移動\r
- if(!NyLPC_TUInt32ArrayPtr_seek(&wp,1)){\r
- return 0;//エラー\r
- }\r
- continue;\r
- case NyLPC_TcMiMicDbCompiler_RET_CONTINUE:\r
- //フラグメント化してたらエラー\r
- i_inst->error_reason=NyLPC_TcMiMicDbCompiler_ERROR_FRAGMENT_UNIT;\r
- default:\r
- return 0;\r
- }\r
- }\r
- //変換完了\r
- return o_val->len-wp.len;\r
+ struct NyLPC_TUInt32ArrayPtr wp=*o_val;\r
+ struct NyLPC_TCharArrayPtr rp=*i_bc;\r
+ NyLPC_TUInt16 s;\r
+ NyLPC_Assert(i_bc->len>0);\r
+ while(i_bc->len>0){\r
+ //空き領域チェック\r
+ if(wp.len==0){\r
+ //空き領域不足\r
+ i_inst->error_reason=NyLPC_TcMiMicDbCompiler_ERROR_OUT_BUFFER_TOO_SHORT;\r
+ return 0;\r
+ }\r
+ switch(NyLPC_cMiMicDbCompiler_compileFragment(i_inst,&rp,o_val->ptr,&s)){\r
+ case NyLPC_TcMiMicDbCompiler_RET_OK:\r
+ //入力ポインタの移動\r
+ if(!NyLPC_TCharArrayPtr_seek(&rp,s)){\r
+ return 0;\r
+ }\r
+ //出力ポインタの移動\r
+ if(!NyLPC_TUInt32ArrayPtr_seek(&wp,1)){\r
+ return 0;//エラー\r
+ }\r
+ continue;\r
+ case NyLPC_TcMiMicDbCompiler_RET_CONTINUE:\r
+ //フラグメント化してたらエラー\r
+ i_inst->error_reason=NyLPC_TcMiMicDbCompiler_ERROR_FRAGMENT_UNIT;\r
+ default:\r
+ return 0;\r
+ }\r
+ }\r
+ //変換完了\r
+ return o_val->len-wp.len;\r
}\r
\r
\r
#ifndef TEST\r
void main(void)\r
{\r
- int i=0;\r
- struct NyLPC_TCharArrayPtr bc;\r
- const char* BC="0000000100000002";\r
- const char* rp;\r
- NyLPC_TcMiMicDbCompiler_t inst;\r
- NyLPC_TUInt32 obuf[1024];\r
- NyLPC_TUInt16 pl;\r
- NyLPC_cMiMicDbCompiler_initialize(&inst);\r
- bc.ptr=(char*)BC;\r
- bc.len=strlen(BC);\r
- rp=BC;\r
- NyLPC_cMiMicDbCompiler_compileFragment(&inst,&bc,obuf,&pl);\r
+ int i=0;\r
+ struct NyLPC_TCharArrayPtr bc;\r
+ const char* BC="0000000100000002";\r
+ const char* rp;\r
+ NyLPC_TcMiMicDbCompiler_t inst;\r
+ NyLPC_TUInt32 obuf[1024];\r
+ NyLPC_TUInt16 pl;\r
+ NyLPC_cMiMicDbCompiler_initialize(&inst);\r
+ bc.ptr=(char*)BC;\r
+ bc.len=strlen(BC);\r
+ rp=BC;\r
+ NyLPC_cMiMicDbCompiler_compileFragment(&inst,&bc,obuf,&pl);\r
/*\r
- for(;;){\r
- switch(NyLPC_cMiMicDbCompiler_compileFragment2(&inst,*bc.ptr,&obuf[i]))\r
- {\r
- case NyLPC_TcMiMicDbCompiler_RET_ERROR:\r
- printf("ERROR");\r
- return;\r
- case NyLPC_TcMiMicDbCompiler_RET_CONTINUE:\r
- NyLPC_TCharArrayPtr_seek(&bc,1);\r
- break;\r
- case NyLPC_TcMiMicDbCompiler_RET_OK:\r
- i++;\r
- NyLPC_TCharArrayPtr_seek(&bc,1);\r
- break;\r
- }\r
- }\r
+ for(;;){\r
+ switch(NyLPC_cMiMicDbCompiler_compileFragment2(&inst,*bc.ptr,&obuf[i]))\r
+ {\r
+ case NyLPC_TcMiMicDbCompiler_RET_ERROR:\r
+ printf("ERROR");\r
+ return;\r
+ case NyLPC_TcMiMicDbCompiler_RET_CONTINUE:\r
+ NyLPC_TCharArrayPtr_seek(&bc,1);\r
+ break;\r
+ case NyLPC_TcMiMicDbCompiler_RET_OK:\r
+ i++;\r
+ NyLPC_TCharArrayPtr_seek(&bc,1);\r
+ break;\r
+ }\r
+ }\r
*/\r
- return;\r
+ return;\r
}\r
#endif\r