SpringScriptEngine  1.0.0
A script engine
CScriptEngine.h
[詳解]
1 
5 #pragma once
6 #include "CScriptEngine.h"
7 #include "CVariableMan.h"
8 #include "CErrorMan.h"
9 
10 //構造体
11 typedef struct tagCommandArg {
12  std::string commandName;
13  std::vector<CVariableMan> ArgList;
14 } CommandArg;
15 
16 typedef int(*seCOMMAND)(void *, CommandArg *);
17 
18 typedef struct tagCommandInfo {
19  std::string name;
20  std::string prm;
22  void *arg;
23 } CommandInfo;
24 
25 typedef struct tagPostionInfo {
26  size_t uPos;
27  size_t uLine;
28 } PostionInfo;
29 
31 {
32 public:
33  CScriptEngine();
35  bool Load(const char *sFilename);
36  bool LoadFromMem(const char *buf);
37  bool Run();
38  bool RegisterCommand(const std::string &name, const std::string &prm, seCOMMAND pFunc, void *arg);
39  bool UnregisterCommand(const std::string &name);
40  bool GoTo(const std::string &sLabel, bool bEvent = false);
41 
43  inline void Exit() { m_bWantExit = true; };
45  inline void Break() { m_bWantBreak = true; };
47  inline void SetPostion(const PostionInfo &o) { m_PosInfo = o; m_uSPos = o.uPos; m_bSetPostion = true; };
49  inline void SetPostionForce(const PostionInfo &o) { m_PosInfo = o; m_uSPos = o.uPos; };
51  inline const PostionInfo GetPostion() { return m_PosInfo; };
52  inline const PostionInfo GetPostionLH() { static PostionInfo pi; pi.uLine = m_PosInfo.uLine; pi.uPos = m_uSPos; return pi; };
54  inline const std::string *GetScriptFName() { return &m_sFilename; };
56  inline size_t GetLine() { return m_PosInfo.uLine; };
57 
58  int Eval_i(const std::string &sExpression);
59  float Eval_f(const std::string &sExpression);
60 
62 
63 private:
64  std::string m_Buf;
65  size_t m_uBufSize;
67  size_t m_uSPos;
68  std::string m_sFilename;
69 
72 
74 
75  std::vector<CVariableMan> m_varList;
76  std::vector<CommandInfo> m_cmdlist;
77 
78  std::map<std::string, PostionInfo> m_label;
79 
80  bool CheckAllLabels();
81  bool AnalyzeCommand(const std::string &sLine, CommandArg &cmdInfo);
82  bool AnalyzeArgument(const std::string &rawData, CVariableMan &v);
83  bool CallCommand(CommandArg &cmdInfo);
84 
85  unsigned char CheckMultiByte(unsigned char in, char Char) {
86  if (in != 1 && _ismbblead(Char))
87  return 1;
88  else if (in == 1)
89  return 2;
90  return 0;
91  };
92 };
bool CallCommand(CommandArg &cmdInfo)
命令を呼び出す
Definition: CScriptEngine.cpp:477
void SetPostionForce(const PostionInfo &o)
処理するファイル内位置を変更(後処理なし)
Definition: CScriptEngine.h:49
std::string name
命令の名前
Definition: CScriptEngine.h:19
void SetPostion(const PostionInfo &o)
処理するファイル内位置を変更
Definition: CScriptEngine.h:47
std::vector< CommandInfo > m_cmdlist
命令リスト
Definition: CScriptEngine.h:76
bool GoTo(const std::string &sLabel, bool bEvent=false)
ラベルジャンプ
Definition: CScriptEngine.cpp:201
seCOMMAND pFunc
呼び出す関数のポインタ
Definition: CScriptEngine.h:21
std::string m_Buf
Definition: CScriptEngine.h:64
const PostionInfo GetPostionLH()
Definition: CScriptEngine.h:52
struct tagPostionInfo PostionInfo
size_t uPos
ファイルの先頭からの位置
Definition: CScriptEngine.h:26
std::vector< CVariableMan > ArgList
引数
Definition: CScriptEngine.h:13
std::string commandName
命令の名前
Definition: CScriptEngine.h:12
void Break()
全てのスクリプトの実行を中止
Definition: CScriptEngine.h:45
const PostionInfo GetPostion()
現在のファイル内位置を取得
Definition: CScriptEngine.h:51
Definition: CVariableMan.h:7
Definition: CScriptEngine.h:18
Definition: CErrorMan.h:25
bool Load(const char *sFilename)
スクリプトを読み込み
Definition: CScriptEngine.cpp:28
bool AnalyzeCommand(const std::string &sLine, CommandArg &cmdInfo)
行を解析
Definition: CScriptEngine.cpp:228
bool AnalyzeArgument(const std::string &rawData, CVariableMan &v)
引数を解析
Definition: CScriptEngine.cpp:306
std::vector< CVariableMan > m_varList
変数バッファ
Definition: CScriptEngine.h:75
bool RegisterCommand(const std::string &name, const std::string &prm, seCOMMAND pFunc, void *arg)
命令を登録
Definition: CScriptEngine.cpp:157
void Exit()
スクリプトの実行を中止
Definition: CScriptEngine.h:43
Definition: CScriptEngine.h:30
Definition: CScriptEngine.h:11
struct tagCommandArg CommandArg
std::string prm
引数
Definition: CScriptEngine.h:20
size_t m_uSPos
行の先頭への位置
Definition: CScriptEngine.h:67
size_t uLine
処理中の行
Definition: CScriptEngine.h:27
CErrorMan m_em
Definition: CScriptEngine.h:61
変数を管理するクラス
~CScriptEngine()
Definition: CScriptEngine.cpp:21
const std::string * GetScriptFName()
読み込んだスクリプトファイルのパスを取得
Definition: CScriptEngine.h:54
エラーキャッチ用クラス。
bool CheckAllLabels()
全てのラベルをチェック
Definition: CScriptEngine.cpp:121
bool m_bWantBreak
Definition: CScriptEngine.h:71
bool m_bWantExit
Definition: CScriptEngine.h:71
CScriptEngine()
Definition: CScriptEngine.cpp:9
bool m_bSetPostion
ファイル内位置が変更されたか
Definition: CScriptEngine.h:70
スクリプトエンジン本体のヘッダコード。
bool UnregisterCommand(const std::string &name)
命令を削除
Definition: CScriptEngine.cpp:179
int Eval_i(const std::string &sExpression)
文字列の数式を評価(int)
Definition: CScriptEngine.cpp:704
int(* seCOMMAND)(void *, CommandArg *)
Definition: CScriptEngine.h:16
void * arg
ユーザー定義の値
Definition: CScriptEngine.h:22
PostionInfo m_PosInfo
現在位置
Definition: CScriptEngine.h:66
float Eval_f(const std::string &sExpression)
文字列の数式を評価(float)
Definition: CScriptEngine.cpp:712
bool LoadFromMem(const char *buf)
メモリからスクリプトを読み込む
Definition: CScriptEngine.cpp:54
std::string m_sFilename
Definition: CScriptEngine.h:68
std::map< std::string, PostionInfo > m_label
ラベルリスト
Definition: CScriptEngine.h:78
size_t m_uBufSize
Definition: CScriptEngine.h:65
bool Run()
スクリプトを実行
Definition: CScriptEngine.cpp:71
size_t GetLine()
処理中の行
Definition: CScriptEngine.h:56
unsigned char CheckMultiByte(unsigned char in, char Char)
Definition: CScriptEngine.h:85
int m_nRunCount
Definition: CScriptEngine.h:73
struct tagCommandInfo CommandInfo
Definition: CScriptEngine.h:25