• R/O
  • SSH
  • HTTPS

iris-fmw: Commit


Commit MetaInfo

Revision268 (tree)
Time2012-01-24 21:49:33
Authorshirayanagi

Log Message

angelscript 対応

Change Summary

Incremental Difference

--- trunk/framework/src/iris_using.h (revision 267)
+++ trunk/framework/src/iris_using.h (revision 268)
@@ -8,7 +8,7 @@
88 * @version 1.0
99 *
1010 * @par copyright
11- * Copyright (C) 2009-2011 Takazumi Shirayanagi\n
11+ * Copyright (C) 2009-2012 Takazumi Shirayanagi\n
1212 * The new BSD License is applied to this software.
1313 * see iris_LICENSE.txt
1414 */
@@ -65,6 +65,7 @@
6565 namespace rnd {}
6666 using namespace rnd;
6767 }
68+ using namespace as;
6869 using namespace ax;
6970 using namespace fnd;
7071 using namespace gx;
--- trunk/framework/src/iris_namespace.h (revision 267)
+++ trunk/framework/src/iris_namespace.h (revision 268)
@@ -8,7 +8,7 @@
88 * @version 1.0
99 *
1010 * @par copyright
11- * Copyright (C) 2011 Takazumi Shirayanagi\n
11+ * Copyright (C) 2011-2012 Takazumi Shirayanagi\n
1212 * The new BSD License is applied to this software.
1313 * see iris_LICENSE.txt
1414 */
@@ -63,6 +63,10 @@
6363 namespace stl
6464 {
6565 }
66+ //! angelscript
67+ namespace as
68+ {
69+ }
6670 //! lua
6771 namespace lua
6872 {
--- trunk/framework/src/iris_tchar.h (revision 267)
+++ trunk/framework/src/iris_tchar.h (revision 268)
@@ -43,3 +43,46 @@
4343 # define _tcsequ(a, b) (strcmp(a, b) == 0)
4444 # endif
4545 #endif
46+
47+
48+#ifndef _tcsskipws
49+# ifdef UNICODE
50+# define _tcsskipws(p_) wcsskipws(p_)
51+# else
52+# define _tcsskipws(p_) strskipws(p_)
53+# endif
54+#endif
55+
56+STATICINLINE wchar_t* wcsskipws(wchar_t* p)
57+{
58+ wchar_t* tp = p;
59+ if( tp == nullptr ) return tp;
60+ while( (*tp == L' ') || (*tp == L'\t') ) ++tp;
61+ return tp;
62+}
63+#if defined(__cplusplus)
64+STATICINLINE const wchar_t* wcsskipws(const wchar_t* p)
65+{
66+ const wchar_t* tp = p;
67+ if( tp == nullptr ) return tp;
68+ while( (*tp == L' ') || (*tp == L'\t') ) ++tp;
69+ return tp;
70+}
71+#endif
72+
73+STATICINLINE char* strskipws(char* p)
74+{
75+ char* tp = p;
76+ if( tp == nullptr ) return tp;
77+ while( (*tp == ' ') || (*tp == '\t') ) ++tp;
78+ return tp;
79+}
80+#if defined(__cplusplus)
81+STATICINLINE const char* strskipws(const char* p)
82+{
83+ const char* tp = p;
84+ if( tp == nullptr ) return tp;
85+ while( (*tp == ' ') || (*tp == '\t') ) ++tp;
86+ return tp;
87+}
88+#endif
--- trunk/framework/src/script/angelscript/AsCompiler.cpp (revision 267)
+++ trunk/framework/src/script/angelscript/AsCompiler.cpp (revision 268)
@@ -21,6 +21,7 @@
2121 #include "AsCompiler.h"
2222 #include "../../fnd/memory/FndMemBuffer.h"
2323 #include "../../fnd/io/FndFile.h"
24+#include "../../iris_tchar.h"
2425 #include "../../iris_debug.h"
2526
2627 #ifdef _IRIS_SUPPORT_ANGELSCRIPT
@@ -34,8 +35,8 @@
3435 * コンストラクタ
3536 *
3637 *//***********************************************************************/
37-CAsCompiler::CAsCompiler(asIScriptModule* module)
38- : m_pModule(module)
38+CAsCompiler::CAsCompiler(void)
39+ : m_pModule(nullptr)
3940 {
4041 }
4142
@@ -50,23 +51,42 @@
5051
5152 /**********************************************************************//**
5253 *
54+ * コンストラクタ
55+ *
56+ -----------------------------------------------------------------------
57+ * @param [in] module = モジュール
58+ * @return 結果
59+*//***********************************************************************/
60+bool CAsCompiler::Initialize(asIScriptModule* module)
61+{
62+ if( module == nullptr ) return false;
63+ asIScriptEngine* engine = module->GetEngine();
64+ if( engine == nullptr ) return false;
65+ m_pModule = module;
66+ return true;
67+}
68+
69+/**********************************************************************//**
70+ *
5371 * インクルード
5472 *
5573 -----------------------------------------------------------------------
5674 * @param [in] lpszFileName = ファイルパス
57- * @return 成否
75+ * @return 結果
5876 *//***********************************************************************/
59-bool CAsCompiler::Include(const char* lpszFileName)
77+int CAsCompiler::Include(const char* lpszFileName)
6078 {
61- if( m_pModule == nullptr ) return false;
79+ if( m_pModule == nullptr ) return asNO_MODULE;
6280 fnd::CFile file;
63- if( !file.Open(lpszFileName, fnd::FOPEN_READ) ) return false;
81+ if( !file.Open(lpszFileName, fnd::FOPEN_READ) ) return asERROR;
6482 u32 size = file.GetSize();
6583 fnd::CMemBuffer buf;
6684 buf.Alloc(size);
6785 file.Read(buf, size);
68- int r = m_pModule->AddScriptSection(lpszFileName, static_cast<const char*>(buf.GetAddr()), size);
69- return AS_SUCCEEDED(r);
86+ int r = Preprocess(buf, size);
87+ if( AS_FAILED(r) ) return r;
88+ r = m_pModule->AddScriptSection(lpszFileName, static_cast<const char*>(buf.GetAddr()), size);
89+ return r;
7090 }
7191
7292 /**********************************************************************//**
@@ -83,6 +103,58 @@
83103 return ret;
84104 }
85105
106+/**********************************************************************//**
107+ *
108+ * プリプロセス
109+ *
110+ -----------------------------------------------------------------------
111+ * @param [in] buf = バッファ
112+ * @param [in] size = サイズ
113+ * @return 結果
114+*//***********************************************************************/
115+int CAsCompiler::Preprocess(void* buf, u32 size)
116+{
117+ IRIS_ASSERT(m_pModule != nullptr);
118+ char* p = static_cast<char*>(buf);
119+
120+ if( p == nullptr ) return asERROR;
121+
122+ while(*p != '\0')
123+ {
124+ char* top = p;
125+ // skip whitespace
126+ p = strskipws(p);
127+
128+ if( strncmp(p, "#include", 8) == 0 )
129+ {
130+ p += 8;
131+ p = strskipws(p);
132+ if( *p == '\"' )
133+ {
134+ ++p;
135+ char path[MAX_PATH];
136+ for( int i=0; i < MAX_PATH; ++i )
137+ {
138+ path[i] = *p;
139+ ++p;
140+ if( *p == '\"' || *p == '\n' || *p == '\0' ) break;
141+ }
142+ // include
143+ int r = Include(path);
144+ if( AS_FAILED(r) ) return r;
145+ // コメントアウト
146+ *top = '/';
147+ *(top+1) = '/';
148+ }
149+ }
150+
151+ p = strchr(p, '\n');
152+ if( p == nullptr ) break;
153+ ++p;
154+ }
155+ return asSUCCESS;
156+}
157+
86158 } // end of namespace as
87159 } // end of namespace iris
88160
--- trunk/framework/src/script/angelscript/AsCompiler.h (revision 267)
+++ trunk/framework/src/script/angelscript/AsCompiler.h (revision 268)
@@ -38,13 +38,15 @@
3838 asIScriptModule* m_pModule; //!< モジュール
3939 public:
4040 // コンストラクタ
41- CAsCompiler(asIScriptModule* module);
41+ CAsCompiler(void);
4242 // デストラクタ
4343 ~CAsCompiler(void);
4444
4545 public:
46+ // 初期化
47+ bool Initialize(asIScriptModule* module);
4648 // ファイルインクルード
47- bool Include(const char* lpszFileName);
49+ int Include(const char* lpszFileName);
4850 // ビルド
4951 int Build(void);
5052
@@ -53,6 +55,10 @@
5355 void SetModule(asIScriptModule* module) { m_pModule = module; }
5456 // モジュールの取得
5557 asIScriptModule* GetModule(void) const { return m_pModule; }
58+
59+private:
60+ // プリプロセス
61+ int Preprocess(void* buf, u32 size);
5662 };
5763
5864 } // end of namespace as
--- trunk/framework/src/script/angelscript/AsVM.cpp (revision 267)
+++ trunk/framework/src/script/angelscript/AsVM.cpp (revision 268)
@@ -19,6 +19,7 @@
1919 //======================================================================
2020 // include
2121 #include "AsVM.h"
22+#include "AsException.h"
2223 #include "../../iris_debug.h"
2324
2425 #ifdef _IRIS_SUPPORT_ANGELSCRIPT
@@ -32,7 +33,8 @@
3233 * コンストラクタ
3334 *
3435 *//***********************************************************************/
35-CAsVM::CAsVM(void)
36+CAsVM::CAsVM(CAsSystem& system)
37+: m_rSystem(system)
3638 {
3739 }
3840
@@ -43,6 +45,7 @@
4345 *//***********************************************************************/
4446 CAsVM::~CAsVM(void)
4547 {
48+ Terminate();
4649 }
4750
4851 /**********************************************************************//**
@@ -53,7 +56,7 @@
5356 * @param [in] compiler = コンパイラ
5457 * @return 結果
5558 *//***********************************************************************/
56-bool CAsVM::Initialize(CAsSystem& system, const CAsCompiler& compiler)
59+bool CAsVM::Initialize(const CAsCompiler& compiler)
5760 {
5861 if( m_Context.IsValid() ) return true; // すでに初期化済み
5962
@@ -62,10 +65,10 @@
6265 if( module == nullptr ) return false;
6366 asIScriptEngine* engine = module->GetEngine();
6467 if( engine == nullptr ) return false;
65- m_Module.ref() = module;
68+ if( !m_Module.Initialize(module) ) return false;
6669
6770 // コンテキストを作成
68- if( !system.CreateContext(m_Context) ) return false;
71+ if( !m_rSystem.CreateContext(m_Context) ) return false;
6972 return true;
7073 }
7174
@@ -75,8 +78,9 @@
7578 *
7679 -----------------------------------------------------------------------
7780 * @param [in] entry = エントリー関数名
81+ * @return 結果
7882 *//***********************************************************************/
79-bool CAsVM::Run(const char* entry)
83+int CAsVM::Run(const char* entry)
8084 {
8185 IRIS_ASSERT( m_Context.IsValid() );
8286 // 名前引き
@@ -85,17 +89,76 @@
8589 {
8690 // 定義引き
8791 func = m_Module->GetFunctionByDecl(entry);
88- if( func = nullptr ) return false;
92+ if( func = nullptr )
93+ {
94+ return asNO_FUNCTION;
95+ }
8996 }
9097
91- if( !m_Context.Prepare(func) ) return false;
98+ int ret = m_Context.Prepare(func);
99+ if( AS_FAILED(ret) ) return ret;
92100
93101 while(1)
94102 {
95103 int ret = m_Context.Execute();
96104
97- if( ret == asEXECUTION_FINISHED ) break;
105+ if( ret == asEXECUTION_FINISHED )
106+ {
107+ const char* p = m_Context.GetExceptionString();
108+ if( p != nullptr )
109+ {
110+#if _IRIS_ANGELSCRIPT_HAS_EXCEPTION
111+ int line, column;
112+ line = m_Context.GetExceptionLineNumber(&column);
113+ int funcId = m_Context.GetExceptionFunction();
114+ throw as_exception(p, m_Module.GetFunctionName(funcId), line, column);
115+#endif
116+ return asERROR;
117+ }
118+ break;
119+ }
98120 }
121+ return asSUCCESS;
122+}
123+
124+/**********************************************************************//**
125+ *
126+ * 終了
127+ *
128+*//***********************************************************************/
129+void CAsVM::Terminate(void)
130+{
131+ m_Context.Terminate();
132+ m_Module = nullptr;
133+}
134+
135+/**********************************************************************//**
136+ *
137+ * 有効なオブジェクトかどうか
138+ *
139+ -----------------------------------------------------------------------
140+ * @param [out] func = 関数オブジェクト
141+ * @return 成否
142+*//***********************************************************************/
143+bool CAsVM::IsValid(void) const
144+{
145+ if( !m_Context.IsValid() ) return false;
146+ return m_Module.is_valid();
147+}
148+
149+/**********************************************************************//**
150+ *
151+ * Functor の設定
152+ *
153+ -----------------------------------------------------------------------
154+ * @param [out] func = 関数オブジェクト
155+ * @param [in] name = 関数名
156+ * @return 成否
157+*//***********************************************************************/
158+bool CAsVM::MakeFunctor(CAsFunction& func, LPCSTR name) const
159+{
160+ if( !IsValid() ) return false;
161+ if( !func.Initialize(m_rSystem, m_Module, name) ) return false;
99162 return true;
100163 }
101164
@@ -102,4 +165,44 @@
102165 } // end of namespace as
103166 } // end of namespace iris
104167
168+#if (defined(_IRIS_UNITTEST) || defined(_IRIS_MULTI_UNITTEST) ) || defined(_IRIS_SUPPORT_GOOGLETEST)
169+
170+//======================================================================
171+// include
172+#include "../../unit/UnitCore.h"
173+#include "../../iris_using.h"
174+#include "../../iris_iostream.h"
175+
176+//======================================================================
177+// test
178+IRIS_UNITTEST(CAsVMUnitTest, UserSelect)
179+{
180+ char path[MAX_PATH] = "../../../data/script/angelscript/hello.as";
181+
182+#if defined(_IRIS_SUPPORT_AUTO_UNITTEST)
183+#else
184+ std::clog << "angelscript ファイルを指定" << std::endl;
185+ std::tcin >> path;
105186 #endif
187+
188+ {
189+ // system
190+ CAsSystem system;
191+ system.Initialize();
192+
193+ // compile
194+ CAsCompiler compiler;
195+ compiler.Initialize(system.CreateModule("test"));
196+ compiler.Include(path);
197+ compiler.Build();
198+
199+ // context
200+ CAsVM vm(system);
201+ vm.Initialize(compiler);
202+ vm.Run("main");
203+ }
204+}
205+
206+#endif
207+
208+#endif
--- trunk/framework/src/script/angelscript/AsContext.cpp (revision 267)
+++ trunk/framework/src/script/angelscript/AsContext.cpp (revision 268)
@@ -2,7 +2,7 @@
22 //-----------------------------------------------------------------------
33 /**
44 * @file AsContext.cpp
5- * @brief AsContext ファイル
5+ * @brief angelscript コンテキスト ファイル
66 *
77 * @author t.sirayanagi
88 * @version 1.0
@@ -53,13 +53,12 @@
5353 *
5454 -----------------------------------------------------------------------
5555 * @param [in] funcId = 関数ID
56- * @return 成否
56+ * @return 結果
5757 *//***********************************************************************/
58-bool CAsContext::Prepare(int funcId)
58+int CAsContext::Prepare(int funcId)
5959 {
6060 IRIS_ASSERT( m_pContext != nullptr );
61- int ret = m_pContext->Prepare(funcId);
62- return AS_SUCCEEDED(ret);
61+ return m_pContext->Prepare(funcId);
6362 }
6463
6564 /**********************************************************************//**
@@ -68,13 +67,12 @@
6867 *
6968 -----------------------------------------------------------------------
7069 * @param [in] func = 関数
71- * @return 成否
70+ * @return 結果
7271 *//***********************************************************************/
73-bool CAsContext::Prepare(asIScriptFunction* func)
72+int CAsContext::Prepare(asIScriptFunction* func)
7473 {
7574 IRIS_ASSERT( m_pContext != nullptr );
76- int ret = m_pContext->Prepare(func);
77- return AS_SUCCEEDED(ret);
75+ return m_pContext->Prepare(func);
7876 }
7977
8078 /**********************************************************************//**
@@ -82,13 +80,12 @@
8280 * 事前登録解除
8381 *
8482 -----------------------------------------------------------------------
85- * @return 成否
83+ * @return 結果
8684 *//***********************************************************************/
87-bool CAsContext::Unprepare(void)
85+int CAsContext::Unprepare(void)
8886 {
8987 IRIS_ASSERT( m_pContext != nullptr );
90- int ret = m_pContext->Unprepare();
91- return AS_SUCCEEDED(ret);
88+ return m_pContext->Unprepare();
9289 }
9390
9491 /**********************************************************************//**
@@ -105,9 +102,79 @@
105102 IRIS_ASSERT( m_pContext != nullptr );
106103 m_pContext->SetArgByte(arg, value);
107104 }
105+template<>
106+void CAsContext::SetArgument<asWORD>(asUINT arg, asWORD value)
107+{
108+ IRIS_ASSERT( m_pContext != nullptr );
109+ m_pContext->SetArgWord(arg, value);
110+}
111+template<>
112+void CAsContext::SetArgument<asDWORD>(asUINT arg, asDWORD value)
113+{
114+ IRIS_ASSERT( m_pContext != nullptr );
115+ m_pContext->SetArgDWord(arg, value);
116+}
117+template<>
118+void CAsContext::SetArgument<asQWORD>(asUINT arg, asQWORD value)
119+{
120+ IRIS_ASSERT( m_pContext != nullptr );
121+ m_pContext->SetArgQWord(arg, value);
122+}
123+template<>
124+void CAsContext::SetArgument<float>(asUINT arg, float value)
125+{
126+ IRIS_ASSERT( m_pContext != nullptr );
127+ m_pContext->SetArgFloat(arg, value);
128+}
129+template<>
130+void CAsContext::SetArgument<double>(asUINT arg, double value)
131+{
132+ IRIS_ASSERT( m_pContext != nullptr );
133+ m_pContext->SetArgDouble(arg, value);
134+}
135+template<>
136+void CAsContext::SetArgument<void*>(asUINT arg, void* value)
137+{
138+ IRIS_ASSERT( m_pContext != nullptr );
139+ m_pContext->SetArgObject(arg, value);
140+}
141+template<>
142+void CAsContext::SetArgument<int>(asUINT arg, int value)
143+{
144+ IRIS_ASSERT( m_pContext != nullptr );
145+ m_pContext->SetArgDWord(arg, value);
146+}
108147
109148 /**********************************************************************//**
110149 *
150+ * 引数にアドレス登録
151+ *
152+ -----------------------------------------------------------------------
153+ * @param [in] arg = 引数のインデックス
154+ * @param [in] obj = アドレス
155+*//***********************************************************************/
156+void CAsContext::SetArgAddress(asUINT arg, void* addr)
157+{
158+ IRIS_ASSERT( m_pContext != nullptr );
159+ m_pContext->SetArgAddress(arg, addr);
160+}
161+
162+/**********************************************************************//**
163+ *
164+ * 引数にオブジェクト登録
165+ *
166+ -----------------------------------------------------------------------
167+ * @param [in] arg = 引数のインデックス
168+ * @param [in] obj = オブジェクト
169+*//***********************************************************************/
170+void CAsContext::SetArgObject(asUINT arg, void* obj)
171+{
172+ IRIS_ASSERT( m_pContext != nullptr );
173+ m_pContext->SetArgObject(arg, obj);
174+}
175+
176+/**********************************************************************//**
177+ *
111178 * 実行
112179 *
113180 -----------------------------------------------------------------------
@@ -151,7 +218,7 @@
151218 *//***********************************************************************/
152219 void CAsContext::Abort(void)
153220 {
154- IRIS_ASSERT( m_pContext != nullptr );
221+ if( m_pContext == nullptr ) return;
155222 m_pContext->Abort();
156223 }
157224
@@ -167,6 +234,63 @@
167234 return m_pContext != nullptr;
168235 }
169236
237+/**********************************************************************//**
238+ *
239+ * 例外文字列取得
240+ *
241+ -----------------------------------------------------------------------
242+ * @return 例外文字列
243+*//***********************************************************************/
244+LPCSTR CAsContext::GetExceptionString(void)
245+{
246+ IRIS_ASSERT( m_pContext != nullptr );
247+ return m_pContext->GetExceptionString();
248+}
249+
250+/**********************************************************************//**
251+ *
252+ * 例外発生関数ID取得
253+ *
254+ -----------------------------------------------------------------------
255+ * @return 例外発生関数ID
256+*//***********************************************************************/
257+int CAsContext::GetExceptionFunction(void)
258+{
259+ IRIS_ASSERT( m_pContext != nullptr );
260+ return m_pContext->GetExceptionFunction();
261+}
262+
263+/**********************************************************************//**
264+ *
265+ * 例外発生ライン情報取得
266+ *
267+ -----------------------------------------------------------------------
268+ * @param [out] column = 列番号出力
269+ * @param [out] scetion = セクション名出力
270+ * @return ライン番号
271+*//***********************************************************************/
272+int CAsContext::GetExceptionLineNumber(int* column, const char** sectionName)
273+{
274+ IRIS_ASSERT( m_pContext != nullptr );
275+ return m_pContext->GetExceptionLineNumber(column, sectionName);
276+}
277+
278+/**********************************************************************//**
279+ *
280+ * 例外コールバックの設定
281+ *
282+ -----------------------------------------------------------------------
283+ * @param [in] callback = コールバック関数
284+ * @param [in] obj =
285+ * @param [in] callConv =
286+ * @return 結果
287+*//***********************************************************************/
288+int CAsContext::SetExceptionCallback(asSFuncPtr callback, void *obj, int callConv)
289+{
290+ IRIS_ASSERT( m_pContext != nullptr );
291+ return m_pContext->SetExceptionCallback(callback, obj, callConv);
292+}
293+
170294 } // end of namespace as
171295 } // end of namespace iris
172296
--- trunk/framework/src/script/angelscript/AsSystem.cpp (revision 267)
+++ trunk/framework/src/script/angelscript/AsSystem.cpp (revision 268)
@@ -2,7 +2,7 @@
22 //-----------------------------------------------------------------------
33 /**
44 * @file AsSystem.cpp
5- * @brief AsSystem ファイル
5+ * @brief angelscript システム ファイル
66 *
77 * @author t.sirayanagi
88 * @version 1.0
@@ -19,6 +19,10 @@
1919 //======================================================================
2020 // include
2121 #include "AsSystem.h"
22+#include <string>
23+
24+// add on
25+#include "../../add_on/scriptstdstring/scriptstdstring.h"
2226 #include "../../iris_debug.h"
2327
2428 #ifdef _IRIS_SUPPORT_ANGELSCRIPT
@@ -40,8 +44,57 @@
4044 namespace as
4145 {
4246
47+namespace
48+{
49+
4350 /**********************************************************************//**
4451 *
52+ * コンパイル時メッセージコールバック
53+ *
54+*//***********************************************************************/
55+static void OnBuildMessageCallback(const asSMessageInfo *msg, void *param)
56+{
57+ const char* type = "ERR ";
58+ switch( msg->type )
59+ {
60+ case asMSGTYPE_WARNING:
61+ type = "WARN";
62+ break;
63+ case asMSGTYPE_INFORMATION:
64+ type = "INFO";
65+ break;
66+ }
67+
68+ printf("%s (%d, %d) : %s : %s\n", msg->section, msg->row, msg->col, type, msg->message);
69+}
70+
71+// 標準関数
72+void asPrint(std::string& msg)
73+{
74+ printf(msg.c_str());
75+}
76+void asPrintf(std::string& fmt, ...)
77+{
78+ va_list va;
79+ va_start(va, fmt);
80+ vprintf(fmt.c_str(), va);
81+ va_end(va);
82+}
83+void asPrintf1(std::string& fmt, int n1) { printf(fmt.c_str(), n1); }
84+void asPrintf2(std::string& fmt, int n1, int n2) { printf(fmt.c_str(), n1, n2); }
85+void asPrintf3(std::string& fmt, int n1, int n2, int n3) { printf(fmt.c_str(), n1, n2, n3); }
86+void asPrintf4(std::string& fmt, int n1, int n2, int n3, int n4) { printf(fmt.c_str(), n1, n2, n3, n4); }
87+void asPrintf5(std::string& fmt, int n1, int n2, int n3, int n4, int n5) { printf(fmt.c_str(), n1, n2, n3, n4, n5); }
88+void asPrintf6(std::string& fmt, int n1, int n2, int n3, int n4, int n5, int n6) { printf(fmt.c_str(), n1, n2, n3, n4, n5, n6); }
89+void asPrintf7(std::string& fmt, int n1, int n2, int n3, int n4, int n5, int n6, int n7) { printf(fmt.c_str(), n1, n2, n3, n4, n5, n6, n7); }
90+void asPrintf8(std::string& fmt, int n1, int n2, int n3, int n4, int n5, int n6, int n7, int n8) { printf(fmt.c_str(), n1, n2, n3, n4, n5, n6, n7, n8); }
91+void asPrintf9(std::string& fmt, int n1, int n2, int n3, int n4, int n5, int n6, int n7, int n8, int n9) { printf(fmt.c_str(), n1, n2, n3, n4, n5, n6, n7, n8, n9); }
92+void asPrintf10(std::string& fmt, int n1, int n2, int n3, int n4, int n5, int n6, int n7, int n8, int n9, int n10) { printf(fmt.c_str(), n1, n2, n3, n4, n5, n6, n7, n8, n9, n10); }
93+
94+}
95+
96+/**********************************************************************//**
97+ *
4598 * コンストラクタ
4699 *
47100 *//***********************************************************************/
@@ -64,10 +117,35 @@
64117 *
65118 * システム初期化
66119 *
120+ -----------------------------------------------------------------------
121+ * @return 成否
67122 *//***********************************************************************/
68-void CAsSystem::Initialize(void)
123+bool CAsSystem::Initialize(void)
69124 {
70125 m_pEngine = asCreateScriptEngine( ANGELSCRIPT_VERSION );
126+ if( m_pEngine == nullptr ) return false;
127+ m_pEngine->SetMessageCallback(asFUNCTION(OnBuildMessageCallback), nullptr, asCALL_CDECL);
128+
129+ // add_on
130+ {
131+ RegisterStdString(m_pEngine);
132+ }
133+ // 関数登録
134+ {
135+ m_pEngine->RegisterGlobalFunction("void print(string &in)", asFUNCTION(asPrint), asCALL_CDECL);
136+ m_pEngine->RegisterGlobalFunction("void printf(string &in)", asFUNCTION(asPrint), asCALL_CDECL);
137+ m_pEngine->RegisterGlobalFunction("void printf(string &in, int)", asFUNCTION(asPrintf1), asCALL_CDECL);
138+ m_pEngine->RegisterGlobalFunction("void printf(string &in, int, int)", asFUNCTION(asPrintf2), asCALL_CDECL);
139+ m_pEngine->RegisterGlobalFunction("void printf(string &in, int, int, int)", asFUNCTION(asPrintf3), asCALL_CDECL);
140+ m_pEngine->RegisterGlobalFunction("void printf(string &in, int, int, int, int)", asFUNCTION(asPrintf4), asCALL_CDECL);
141+ m_pEngine->RegisterGlobalFunction("void printf(string &in, int, int, int, int, int)", asFUNCTION(asPrintf5), asCALL_CDECL);
142+ m_pEngine->RegisterGlobalFunction("void printf(string &in, int, int, int, int, int, int)", asFUNCTION(asPrintf6), asCALL_CDECL);
143+ m_pEngine->RegisterGlobalFunction("void printf(string &in, int, int, int, int, int, int, int)", asFUNCTION(asPrintf7), asCALL_CDECL);
144+ m_pEngine->RegisterGlobalFunction("void printf(string &in, int, int, int, int, int, int, int, int)", asFUNCTION(asPrintf8), asCALL_CDECL);
145+ m_pEngine->RegisterGlobalFunction("void printf(string &in, int, int, int, int, int, int, int, int, int)", asFUNCTION(asPrintf9), asCALL_CDECL);
146+ m_pEngine->RegisterGlobalFunction("void printf(string &in, int, int, int, int, int, int, int, int, int, int)", asFUNCTION(asPrintf10), asCALL_CDECL);
147+ }
148+ return true;
71149 }
72150
73151 /**********************************************************************//**
@@ -78,7 +156,7 @@
78156 void CAsSystem::Terminate(void)
79157 {
80158 // context の終了
81-
159+ DetachObserverAll();
82160 IRIS_SAFE_RELEASE(m_pEngine);
83161 }
84162
@@ -97,6 +175,7 @@
97175 asIScriptContext* p = m_pEngine->CreateContext();
98176 if( p == nullptr ) return false;
99177 context.m_pContext = p;
178+ context.SetExceptionCallback(asMETHOD(CAsSystem, ExceptionCallback), this, asCALL_THISCALL);
100179 AttachObserver(&context);
101180 return true;
102181 }
@@ -131,6 +210,61 @@
131210
132211 /**********************************************************************//**
133212 *
213+ * 関数名の取得
214+ *
215+ -----------------------------------------------------------------------
216+ * @param [in] funcId = 関数ID
217+ * @return 関数名
218+*//***********************************************************************/
219+LPCSTR CAsSystem::GetFunctionName(int funcId) const
220+{
221+ return GetFunctionName(m_pEngine, funcId);
222+}
223+
224+/**********************************************************************//**
225+ *
226+ * 関数名の取得
227+ *
228+ -----------------------------------------------------------------------
229+ * @param [in] funcId = 関数ID
230+ * @return 関数名
231+*//***********************************************************************/
232+LPCSTR CAsSystem::GetFunctionName(asIScriptEngine* engine, int funcId)
233+{
234+ if( engine == nullptr ) return nullptr;
235+ asIScriptFunction* func = engine->GetFunctionById(funcId);
236+ if( func == nullptr ) return nullptr;
237+ return func->GetName();
238+}
239+
240+/**********************************************************************//**
241+ *
242+ * 例外コールバック
243+ *
244+ -----------------------------------------------------------------------
245+ * @param [in] context = コンテキスト
246+*//***********************************************************************/
247+void CAsSystem::ExceptionCallback(asIScriptContext* context)
248+{
249+ printf("angelscript exception occurred: ");
250+ int line, column;
251+ line = context->GetExceptionLineNumber(&column);
252+ int funcId = context->GetExceptionFunction();
253+ const char* func = GetFunctionName(funcId);
254+ if( func != nullptr )
255+ {
256+ printf("%s(%d, %d): ", func, line, column);
257+ }
258+ else
259+ {
260+ printf("(%d, %d): ", line, column);
261+ }
262+ const char* str = context->GetExceptionString();
263+ if( str != nullptr ) printf(str);
264+}
265+
266+/**********************************************************************//**
267+ *
134268 * コンテキスト Detach
135269 *
136270 -----------------------------------------------------------------------
--- trunk/framework/src/script/angelscript/AsModule.cpp (revision 267)
+++ trunk/framework/src/script/angelscript/AsModule.cpp (revision 268)
@@ -2,7 +2,7 @@
22 //-----------------------------------------------------------------------
33 /**
44 * @file AsModule.cpp
5- * @brief AsModule ファイル
5+ * @brief angelscript モジュール ファイル
66 *
77 * @author t.sirayanagi
88 * @version 1.0
@@ -38,23 +38,46 @@
3838
3939 /**********************************************************************//**
4040 *
41- * コンストラクタ
41+ * デストラクタ
4242 *
4343 *//***********************************************************************/
44-CAsModule::CAsModule(asIScriptModule* ptr)
45-: _Mybase(ptr)
44+CAsModule::~CAsModule(void)
4645 {
4746 }
4847
4948 /**********************************************************************//**
5049 *
51- * デストラクタ
50+ * 初期化
5251 *
52+ -----------------------------------------------------------------------
53+ * @param [in] module = モジュール
54+ * @return 成否
5355 *//***********************************************************************/
54-CAsModule::~CAsModule(void)
56+bool CAsModule::Initialize(asIScriptModule* module)
5557 {
58+ if( module == nullptr ) return false;
59+ m_object = module;
60+ return true;
5661 }
5762
63+/**********************************************************************//**
64+ *
65+ * 関数名の取得
66+ *
67+ -----------------------------------------------------------------------
68+ * @param [in] funcId = 関数ID
69+ * @return 関数名
70+*//***********************************************************************/
71+LPCSTR CAsModule::GetFunctionName(int funcId) const
72+{
73+ if( m_object == nullptr ) return nullptr;
74+ asIScriptEngine* engine = m_object->GetEngine();
75+ if( engine == nullptr ) return nullptr;
76+ asIScriptFunction* func = engine->GetFunctionById(funcId);
77+ if( func == nullptr ) return nullptr;
78+ return func->GetName();
79+}
80+
5881 } // end of namespace as
5982 } // end of namespace iris
6083
--- trunk/framework/src/script/angelscript/AsFunction.cpp (nonexistent)
+++ trunk/framework/src/script/angelscript/AsFunction.cpp (revision 268)
@@ -0,0 +1,199 @@
1+//======================================================================
2+//-----------------------------------------------------------------------
3+/**
4+ * @file AsFunction.cpp
5+ * @brief angelscript 関数オブジェクト ファイル
6+ *
7+ * @author t.sirayanagi
8+ * @version 1.0
9+ *
10+ * @par copyright
11+ * Copyright (C) 2012 Takazumi Shirayanagi\n
12+ * The new BSD License is applied to this software.
13+ * see iris_LICENSE.txt
14+*/
15+//-----------------------------------------------------------------------
16+//======================================================================
17+#define INCG_IRIS_AsFunction_CPP_
18+
19+//======================================================================
20+// include
21+#include "AsFunction.h"
22+#include "AsException.h"
23+#include "../../iris_debug.h"
24+
25+#ifdef _IRIS_SUPPORT_ANGELSCRIPT
26+
27+namespace iris {
28+namespace as
29+{
30+
31+/**********************************************************************//**
32+ *
33+ * コンストラクタ
34+ *
35+*//***********************************************************************/
36+CAsFunction::CAsFunction(void)
37+: m_pFunction(nullptr)
38+{
39+}
40+
41+/**********************************************************************//**
42+ *
43+ * デストラクタ
44+ *
45+*//***********************************************************************/
46+CAsFunction::~CAsFunction(void)
47+{
48+}
49+
50+/**********************************************************************//**
51+ *
52+ * 初期化
53+ *
54+ -----------------------------------------------------------------------
55+ * @param [in] system = システム
56+ * @param [in] module = モジュール
57+ * @param [in] name = 名前
58+ * @return 成否
59+*//***********************************************************************/
60+bool CAsFunction::Initialize(CAsSystem& system, asIScriptModule* module, LPCTSTR name)
61+{
62+ Release();
63+ if( module == nullptr ) return false;
64+ if( name == nullptr ) return false;
65+ asIScriptFunction* func = module->GetFunctionByName(name);
66+ if( func == nullptr )
67+ {
68+ func = module->GetFunctionByDecl(name);
69+ }
70+ if( func == nullptr ) return false;
71+ if( !system.CreateContext(m_Context) ) return false;
72+ int ret = m_Context.Prepare(func);
73+ if( AS_FAILED(ret) ) return false;
74+ m_pFunction = func;
75+ return true;
76+}
77+
78+/**********************************************************************//**
79+ *
80+ * 解放
81+ *
82+*//***********************************************************************/
83+void CAsFunction::Release(void)
84+{
85+ m_Context.Terminate();
86+}
87+
88+/**********************************************************************//**
89+ *
90+ * 有効なオブジェクトかどうか
91+ *
92+ -----------------------------------------------------------------------
93+ * @return 真偽値
94+*//***********************************************************************/
95+bool CAsFunction::IsValid(void) const
96+{
97+ return m_pFunction != nullptr;
98+}
99+
100+/**********************************************************************//**
101+ *
102+ * 関数のあるモジュールを取得
103+ *
104+ -----------------------------------------------------------------------
105+ * @return 真偽値
106+*//***********************************************************************/
107+asIScriptModule* CAsFunction::GetModule(void) const
108+{
109+ if( m_pFunction == nullptr ) return nullptr;
110+ asIScriptEngine* engine = m_pFunction->GetEngine();
111+ if( engine == nullptr ) return nullptr;
112+ return engine->GetModule(m_pFunction->GetModuleName());
113+}
114+
115+/**********************************************************************//**
116+ *
117+ * 実行
118+ *
119+*//***********************************************************************/
120+void CAsFunction::Execute(void)
121+{
122+ int ret = m_Context.Execute();
123+ if( ret == asEXECUTION_FINISHED )
124+ {
125+ const char* p = m_Context.GetExceptionString();
126+ if( p != nullptr )
127+ {
128+#if _IRIS_ANGELSCRIPT_HAS_EXCEPTION
129+ asIScriptEngine* engine = nullptr;
130+ if( m_pFunction != nullptr ) engine = m_pFunction->GetEngine();
131+ int line, column;
132+ line = m_Context.GetExceptionLineNumber(&column);
133+ int funcId = m_Context.GetExceptionFunction();
134+ throw as_exception(p, CAsSystem::GetFunctionName(engine, funcId), line, column);
135+#endif
136+ }
137+ }
138+}
139+
140+} // end of namespace as
141+} // end of namespace iris
142+
143+#if (defined(_IRIS_UNITTEST) || defined(_IRIS_MULTI_UNITTEST) ) || defined(_IRIS_SUPPORT_GOOGLETEST)
144+
145+//======================================================================
146+// include
147+#include "AsVM.h"
148+#include "../../unit/UnitCore.h"
149+#include "../../iris_using.h"
150+#include "../../iris_iostream.h"
151+
152+//======================================================================
153+// test
154+IRIS_UNITTEST(CAsFunctionUnitTest, Run)
155+{
156+ char path[MAX_PATH] = "../../../data/script/angelscript/function.as";
157+
158+ {
159+ // system
160+ CAsSystem system;
161+ system.Initialize();
162+
163+ // compile
164+ CAsCompiler compiler;
165+ compiler.Initialize(system.CreateModule("test"));
166+ compiler.Include(path);
167+ compiler.Build();
168+
169+ // context
170+ CAsVM vm(system);
171+ vm.Initialize(compiler);
172+
173+ {
174+ CAsFunction func;
175+ if( vm.MakeFunctor(func, "as_func0") )
176+ {
177+ func();
178+ }
179+ }
180+ {
181+ CAsFunction func;
182+ if( vm.MakeFunctor(func, "as_func1") )
183+ {
184+ func(100);
185+ }
186+ }
187+ {
188+ CAsFunction func;
189+ if( vm.MakeFunctor(func, "as_func2") )
190+ {
191+ func(-1, -90);
192+ }
193+ }
194+ }
195+}
196+
197+#endif
198+
199+#endif
--- trunk/framework/src/script/angelscript/AsVM.h (revision 267)
+++ trunk/framework/src/script/angelscript/AsVM.h (revision 268)
@@ -21,6 +21,7 @@
2121 // include
2222 #include "AsSystem.h"
2323 #include "AsCompiler.h"
24+#include "AsFunction.h"
2425
2526 #ifdef _IRIS_SUPPORT_ANGELSCRIPT
2627
@@ -39,17 +40,27 @@
3940 protected:
4041 CAsContext m_Context;
4142 CAsModule m_Module;
43+ CAsSystem& m_rSystem;
4244 public:
4345 // コンストラクタ
44- CAsVM(void);
46+ CAsVM(CAsSystem& system);
4547 // デストラクタ
4648 ~CAsVM(void);
4749
4850 public:
4951 // 初期化
50- bool Initialize(CAsSystem& system, const CAsCompiler& compiler);
52+ bool Initialize(const CAsCompiler& compiler);
5153 // 実行
52- bool Run(const char* entry);
54+ int Run(const char* entry);
55+ // 終了
56+ void Terminate(void);
57+
58+public:
59+ // 有効なオブジェクトかどうか
60+ bool IsValid(void) const;
61+public:
62+ // Functor の設定
63+ bool MakeFunctor(CAsFunction& func, LPCSTR name) const;
5364 };
5465
5566 } // end of namespace as
--- trunk/framework/src/script/angelscript/AsContext.h (revision 267)
+++ trunk/framework/src/script/angelscript/AsContext.h (revision 268)
@@ -2,7 +2,7 @@
22 //-----------------------------------------------------------------------
33 /**
44 * @file AsContext.h
5- * @brief angelscript システム ファイル
5+ * @brief angelscript コンテキスト ファイル
66 *
77 * @author t.sirayanagi
88 * @version 1.0
@@ -48,14 +48,18 @@
4848
4949 public:
5050 // 関数ID設定
51- bool Prepare(int funcId);
52- bool Prepare(asIScriptFunction* func);
51+ int Prepare(int funcId);
52+ int Prepare(asIScriptFunction* func);
5353 // 解除
54- bool Unprepare(void);
54+ int Unprepare(void);
5555
5656 // 引数登録
5757 template<typename T>
5858 void SetArgument(asUINT arg, T value);
59+ // 引数にアドレス登録
60+ void SetArgAddress(asUINT arg, void* addr);
61+ // 引数にオブジェクト登録
62+ void SetArgObject(asUINT arg, void* obj);
5963
6064 public:
6165 // 実効
@@ -69,6 +73,19 @@
6973
7074 // 有効な状態かどうか
7175 bool IsValid(void) const;
76+
77+public:
78+ // 例外取得
79+ LPCSTR GetExceptionString(void);
80+ // 例外関数ID取得
81+ int GetExceptionFunction(void);
82+ // 例外発生ライン情報取得
83+ int GetExceptionLineNumber(int* column=nullptr, const char** sectionName=nullptr);
84+ // 例外コールバック関数の設定
85+ int SetExceptionCallback(asSFuncPtr callback, void *obj, int callConv);
86+
87+public:
88+ const asIScriptContext* GetContext(void) const { return m_pContext; }
7289 };
7390
7491 } // end of namespace as
--- trunk/framework/src/script/angelscript/AsSystem.h (revision 267)
+++ trunk/framework/src/script/angelscript/AsSystem.h (revision 268)
@@ -37,6 +37,7 @@
3737 */
3838 class CAsSystem : public fnd::CObserverSubject<CAsContext>
3939 {
40+ friend class CAsContext;
4041 typedef fnd::CRefCntPtr<asIScriptEngine> ptr;
4142 protected:
4243 asIScriptEngine* m_pEngine; //!< スクリプトエンジン
@@ -49,7 +50,7 @@
4950
5051 public:
5152 // 初期化
52- void Initialize(void);
53+ bool Initialize(void);
5354 // 終了処理
5455 void Terminate(void);
5556
@@ -64,9 +65,21 @@
6465 asIScriptModule* GetModule(LPCSTR lpszModuleName);
6566
6667 public:
68+ // 関数名の取得
69+ LPCSTR GetFunctionName(int funcId) const;
70+
71+public:
72+ // 関数名の取得
73+ static LPCSTR GetFunctionName(asIScriptEngine* engine, int funcId);
74+
75+public:
6776 ptr GetEngine(void) const { return m_pEngine; }
6877
6978 private:
79+ // 例外コールバック
80+ void ExceptionCallback(asIScriptContext* context);
81+
82+private:
7083 virtual void OnDetach(CAsContext* observer);
7184 };
7285
--- trunk/framework/src/script/angelscript/AsModule.h (revision 267)
+++ trunk/framework/src/script/angelscript/AsModule.h (revision 268)
@@ -2,7 +2,7 @@
22 //-----------------------------------------------------------------------
33 /**
44 * @file AsModule.h
5- * @brief angelscript システム ファイル
5+ * @brief angelscript モジュール ファイル
66 *
77 * @author t.sirayanagi
88 * @version 1.0
@@ -37,13 +37,25 @@
3737 class CAsModule : public fnd::CWrapObject<asIScriptModule*>
3838 {
3939 typedef fnd::CWrapObject<asIScriptModule*> _Mybase;
40- friend class CAsSystem;
4140 public:
4241 // コンストラクタ
4342 CAsModule(void);
44- explicit CAsModule(asIScriptModule* ptr);
4543 // デストラクタ
4644 ~CAsModule(void);
45+
46+public:
47+ // 初期化
48+ bool Initialize(asIScriptModule* module);
49+
50+ // 関数名の取得
51+ LPCSTR GetFunctionName(int funcId) const;
52+
53+public:
54+ CAsModule& operator = (asIScriptModule* obj) { m_object = obj; return *this; }
55+ CAsModule& operator = (const CAsModule& obj) { m_object = obj.m_object; return *this; }
56+#if defined(_IRIS_HAS_NULLPTR_T)
57+ CAsModule& operator = (const nullptr_t& null) { m_object = null; return *this; }
58+#endif
4759 };
4860
4961 } // end of namespace as
--- trunk/framework/src/script/angelscript/AsFunction.h (nonexistent)
+++ trunk/framework/src/script/angelscript/AsFunction.h (revision 268)
@@ -0,0 +1,90 @@
1+//======================================================================
2+//-----------------------------------------------------------------------
3+/**
4+ * @file AsFunction.h
5+ * @brief angelscript 関数オブジェクト ファイル
6+ *
7+ * @author t.sirayanagi
8+ * @version 1.0
9+ *
10+ * @par copyright
11+ * Copyright (C) 2012 Takazumi Shirayanagi\n
12+ * The new BSD License is applied to this software.
13+ * see iris_LICENSE.txt
14+*/
15+//-----------------------------------------------------------------------
16+//======================================================================
17+#ifndef INCG_IRIS_AsFunction_H_
18+#define INCG_IRIS_AsFunction_H_
19+
20+//======================================================================
21+// include
22+#include "AsSystem.h"
23+
24+#ifdef _IRIS_SUPPORT_ANGELSCRIPT
25+
26+namespace iris {
27+namespace as
28+{
29+
30+//======================================================================
31+// class
32+/**
33+ * @ingroup as
34+ * @brief AngelScript Function クラス
35+*/
36+class CAsFunction : public fnd::CObserver<CAsFunction>
37+{
38+protected:
39+ CAsContext m_Context; //!< コンテキスト
40+ asIScriptFunction* m_pFunction; //!< 関数オブジェクト
41+
42+public:
43+ // コンストラクタ
44+ CAsFunction(void);
45+ // デストラクタ
46+ ~CAsFunction(void);
47+
48+public:
49+ // 初期化
50+ bool Initialize(CAsSystem& system, asIScriptModule* module, LPCTSTR name);
51+ // 解放
52+ void Release(void);
53+ // 有効なオブジェクトかどうか
54+ bool IsValid(void) const;
55+
56+public:
57+ // 関数の実行
58+ void operator()(void)
59+ {
60+ Execute();
61+ }
62+ template<typename T1>
63+ void operator()(const T1& a1)
64+ {
65+ m_Context.SetArgument(0, a1);
66+ Execute();
67+ }
68+ template<typename T1, typename T2>
69+ void operator()(const T1& a1, const T2& a2)
70+ {
71+ m_Context.SetArgument(0, a1);
72+ m_Context.SetArgument(1, a2);
73+ Execute();
74+ }
75+
76+public:
77+ // 関数のあるモジュールを取得
78+ asIScriptModule* GetModule(void) const;
79+
80+private:
81+ // 関数の実行
82+ void Execute(void);
83+};
84+
85+} // end of namespace as
86+} // end of namespace iris
87+
88+#endif
89+
90+#endif
--- trunk/framework/src/script/angelscript/as_inchead.h (revision 267)
+++ trunk/framework/src/script/angelscript/as_inchead.h (revision 268)
@@ -32,6 +32,10 @@
3232 #define AS_FAILED(res) (res<0)
3333 #define AS_SUCCEEDED(res) (res>=0)
3434
35+#ifndef _IRIS_ANGELSCRIPT_HAS_EXCEPTION
36+# define _IRIS_ANGELSCRIPT_HAS_EXCEPTION 1
3537 #endif
3638
3739 #endif
40+
41+#endif
--- trunk/framework/src/script/angelscript/AsException.h (nonexistent)
+++ trunk/framework/src/script/angelscript/AsException.h (revision 268)
@@ -0,0 +1,59 @@
1+//======================================================================
2+//-----------------------------------------------------------------------
3+/**
4+ * @file AsException.h
5+ * @brief angelscript 例外 ファイル
6+ *
7+ * @author t.sirayanagi
8+ * @version 1.0
9+ *
10+ *
11+ * @par copyright
12+ * Copyright (C) 2012 Takazumi Shirayanagi\n
13+ * The new BSD License is applied to this software.
14+ * see iris_LICENSE.txt
15+*/
16+//-----------------------------------------------------------------------
17+//======================================================================
18+#ifndef INCG_IRIS_AsException_H_
19+#define INCG_IRIS_AsException_H_
20+
21+//======================================================================
22+// include
23+#include "as_inchead.h"
24+
25+#ifdef _IRIS_SUPPORT_ANGELSCRIPT
26+
27+#if _IRIS_ANGELSCRIPT_HAS_EXCEPTION
28+#include <exception>
29+#include <string>
30+
31+namespace iris {
32+namespace as
33+{
34+
35+
36+/**
37+ * @brief angelscript 例外
38+*/
39+class as_exception : public std::exception
40+{
41+public:
42+ int line, column;
43+ const char* function;
44+public:
45+ as_exception(const char *const& _What, const char* _func, int _line, int _column)
46+ : std::exception(_What), function(_func), line(_line), column(_column) {}
47+ as_exception(void) : std::exception() {}
48+ ~as_exception(void) {}
49+};
50+
51+
52+} // end of namespace as
53+} // end of namespace iris
54+
55+#endif
56+
57+#endif
58+
59+#endif
\ No newline at end of file
--- trunk/framework/src/fnd/image/FndYUV.h (revision 267)
+++ trunk/framework/src/fnd/image/FndYUV.h (revision 268)
@@ -96,7 +96,7 @@
9696 * @tparam CRANGE_ = Cb,Cr の範囲
9797 */
9898 template<typename PARAM_, int YRANGE_=219, int CRANGE_=224>
99-class CYCbCrBase
99+class CYCbCrBase : public IIrisObject
100100 {
101101 public:
102102 static const int BITSIZE = 8;
Show on old repository browser