inf.h

C:\home\SVGCats_src\src\inf.h

[目次 | 型・クラス・構造体 | マクロ]

目次

型・クラス・構造体一覧

マクロ一覧


   1|/**************************************************************************
   2|*  1. <<< インターフェイス (Inf) >>> 
   3|***************************************************************************/
   4|
   5|#ifndef  __INF_H
   6|#define  __INF_H
   7|
   8|/*----------------------------------------------------------------------
   9|[Module Property]
  10|name = Inf
  11|title = インターフェイス
  12|category = 基本型
  13|src =
  14|depend =
  15|priority =
  16|accord =
  17|----------------------------------------------------------------------*/
  18|
  19|
  20| 
  21|/*************************************************************************
  22|*  2. <<< [Inf 優先ヘッダ, Inf_FinishFunc] >>> 
  23|**************************************************************************/
  24|#ifndef USES_PRIORITY_HEADER
  25|/*[START_OF_PRIORITY_HEADER]*/
  26|
  27|#ifndef  USES_INF
  28|#define  USES_INF
  29|
  30|#define  INF_TYPEDEF( _Inf, Inf ) \
  31| \
  32|  typedef struct _Inf##_Sc   Inf##_Sc; \
  33| \
  34|  typedef struct _Inf { \
  35|    Inf##_Sc*  sc;  /* スキーマのアドレス */ \
  36|    void*  obj;     /* オブジェクトのアドレス */ \
  37|  } Inf; \
  38|  typedef struct _Inf##_Pac { \
  39|    Inf##_Sc*  sc;  /* スキーマのアドレス */ \
  40|    void*  param;   /* サブクラス・パラメータのアドレス */ \
  41|  } Inf##_Pac
  42|
  43|typedef  void (*Inf_FinishFunc)( void* );
  44|
  45|typedef  struct _Inf_Mp  Inf_Mp;
  46|
  47|#endif
  48|
  49|/*[END_OF_PRIORITY_HEADER]*/
  50|#endif
  51|
  52| 
  53|/*************************************************************************
  54|*  3. <<< エラーコード >>> 
  55|**************************************************************************/
  56|#define  Inf_Err_WrongNumOfParam  5419
  57| 
  58|/*-------------------------------------------------------------------*/
  59|/* 4. <<< ◆インターフェイス >>> */ 
  60|/*-------------------------------------------------------------------*/
  61|
  62|#ifdef  __cplusplus
  63|extern "C" {
  64|#endif
  65| 
  66|/***********************************************************************
  67|*  5. <<< [Inf_init] インターフェイス・ポインタの初期化 >>> 
  68|*【補足】
  69|*・void  Inf_init( Inf*, void* obj, void* sc );
  70|*・本関数のみ、Inf 型の「ポインタ」を引数に取ります。
  71|************************************************************************/
  72|#define  Inf_init( this, _obj, _sc ) \
  73|  ( (this)->obj = (_obj), (this)->sc = (_sc) )
  74|
  75| 
  76|/***********************************************************************
  77|*  6. <<< [INF_TYPEDEF] インターフェイス型宣言 >>> 
  78|*【引数】
  79|*  ・_Inf;  内部構造体のタグ
  80|*  ・Inf;   インターフェイスの型名
  81|*【補足】
  82|*・グローバル領域に INF_TYPEDEF( _Inf, Inf ); のように宣言することで、
  83|*  Inf 型のインターフェイス(ポインタ)を宣言できます。
  84|*・実装は、Inf 優先ヘッダにあります。
  85|*・インターフェイス・スキーマは、別途宣言する必要があります。
  86|*  ドキュメントの「インターフェイスのサンプル」を参考。
  87|************************************************************************/
  88| 
  89|/***********************************************************************
  90|*  7. <<< [INF_MACRO_0, INF_MACRO_1] インターフェイス・マクロの定義 >>> 
  91|*  8. <<< [INF_MACRO_2, INF_MACRO_3, INF_MACRO_4, INF_MACRO_5] >>>
  92|*  9. <<< [INF_MACRO_6, INF_MACRO_7] >>>
  93|*【引数】
  94|*  ・Inf;    インターフェイスの型名
  95|*  ・method; 内部関数ポインタ名
  96|*  ・type;   返り値の型
  97|*  ・func;   メンバ関数名
  98|*  ・thisT;  引数の型
  99|*  ・argtX;  引数の型
 100|*  ・t,a,b..;  引数(引数名は t,a,b... をそのまま指定します)
 101|*【補足】
 102|*・インターフェイスのヘッダファイルのグローバル領域の #define 文の中に書きます。
 103|*  ただし、引数は、t から始まり、a,b,c,d,... と続けてください。★
 104|*・INF_FUNC_0 などと同じ機能なので、マクロで条件分岐するなどして、
 105|*  どちらかのみ使用します。
 106|*・マクロ版には、引数(アドレス)のエラーチェックがありません。
 107|*・上記の Inf_Sample を参照
 108|*【例】
 109|*  #ifdef  NDEBUG
 110|*  #define  InfType_method1(t)     INF_MACRO_0( InfType, method1, int, InfType_method1, InfType,t )
 111|*  #define  InfType_method2(t,a,b) INF_MACRO_2( InfType, method2, void, InfType_method2, InfType, int, char*,t,a,b )
 112|*  #define  InfType_method3(t,a)   INF_MACRO_1( InfType, method2, void, InfType_method3, InfType, int,t,a )
 113|*  #endif
 114|************************************************************************/
 115|#define  INF_MACRO_R0  INF_MACRO_0
 116|#define  INF_MACRO_0( Inf, method, type, func, thisT,t ) \
 117|  ((Inf##_Sc*)(t).sc)->method( (t).obj )
 118|#define  INF_MACRO_SR0( Inf, method, type, func, thisScT, t ) \
 119|  ((t)->method( t )) \
 120|
 121|#define  INF_MACRO_R1  INF_MACRO_1
 122|#define  INF_MACRO_1( Inf, method, type, func, thist, argt1,t,a ) \
 123|  ((Inf##_Sc*)(t).sc)->method( (t).obj, a )
 124|#define  INF_MACRO_SR1( Inf, method, type, func, thisScT, arg1T, t,a ) \
 125|  ((t)->method(t, a))
 126|#define  INF_MACRO_PR1( Inf, method, type, func, thisScT, arg1T, t,a ) \
 127|  ((t).sc->method( t,a ))
 128|
 129|#define  INF_MACRO_R2  INF_MACRO_2
 130|#define  INF_MACRO_2( Inf, method, type, func, thist, argt1, argt2,t,a,b ) \
 131|  ((Inf##_Sc*)(t).sc)->method( (t).obj, a, b )
 132|#define  INF_MACRO_SR2( Inf, method, type, func, thisScT, arg1T, arg2T, t,a,b ) \
 133|  ((t)->method(t, a,b))
 134|#define  INF_MACRO_PR2( Inf, method, type, func, thisScT, arg1T, arg2T, t,a,b ) \
 135|  ((t).sc->method( t,a,b ))
 136|
 137|#define  INF_MACRO_R3  INF_MACRO_3
 138|#define  INF_MACRO_3( Inf, method, type, func, thist, argt1, argt2, argt3,t,a,b,c ) \
 139|  ((Inf##_Sc*)(t).sc)->method( (t).obj, a, b, c )
 140|#define  INF_MACRO_SR3( Inf, method, type, func, thisScT, arg1T, arg2T, arg3T, t,a,b,c ) \
 141|  ((t)->method(t, a,b,c))
 142|#define  INF_MACRO_PR3( Inf, method, type, func, thisScT, arg1T, arg2T, arg3T, t,a,b,c ) \
 143|  ((t).sc->method( t,a,b,c ))
 144|
 145|#define  INF_MACRO_R4  INF_MACRO_4
 146|#define  INF_MACRO_4( Inf, method, type, func, thist, argt1, argt2, argt3, argt4,t,a,b,c,d ) \
 147|  ((Inf##_Sc*)(t).sc)->method( (t).obj, a, b, c, d )
 148|#define  INF_MACRO_SR4( Inf, method, type, func, thisScT, arg1T, arg2T, arg3T, arg4T, t,a,b,c,d ) \
 149|  ((t)->method(t, a,b,c,d))
 150|#define  INF_MACRO_PR4( Inf, method, type, func, thisScT, arg1T, arg2T, arg3T, arg4T, t,a,b,c,d ) \
 151|  ((t).sc->method( t,a,b,c,d ))
 152|
 153|#define  INF_MACRO_R5  INF_MACRO_5
 154|#define  INF_MACRO_5( Inf, method, type, func, thist, argt1, argt2, argt3, argt4, argt5,t,a,b,c,d,e ) \
 155|  ((Inf##_Sc*)(t).sc)->method( (t).obj, a, b, c, d, e )
 156|#define  INF_MACRO_SR5( Inf, method, type, func, thisScT, arg1T, arg2T, arg3T, arg4T, arg5T, t,a,b,c,d,e ) \
 157|  ((t)->method(t, a,b,c,d,e))
 158|#define  INF_MACRO_PR5( Inf, method, type, func, thisScT, arg1T, arg2T, arg3T, arg4T, arg5T, t,a,b,c,d,e ) \
 159|  ((t).sc->method( t,a,b,c,d,e ))
 160|
 161|#define  INF_MACRO_R6  INF_MACRO_6
 162|#define  INF_MACRO_6( Inf, method, type, func, thist, argt1, argt2, argt3, argt4, argt5, arg6, t,a,b,c,d,e,f ) \
 163|  ((Inf##_Sc*)(t).sc)->method( (t).obj, a, b, c, d, e, f )
 164|#define  INF_MACRO_SR6( Inf, method, type, func, thisScT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, t,a,b,c,d,e,f ) \
 165|  ((t)->method(t, a,b,c,d,e,f))
 166|#define  INF_MACRO_PR6( Inf, method, type, func, thisScT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, t,a,b,c,d,e,f ) \
 167|  ((t).sc->method( t,a,b,c,d,e,f ))
 168|
 169|#define  INF_MACRO_R7  INF_MACRO_7
 170|#define  INF_MACRO_7( Inf, method, type, func, thisT, argT1, argT2, argT3, argT4, argT5, argT6, argT7, t,a,b,c,d,e,f,g ) \
 171|  ((Inf##_Sc*)(t).sc)->method( (t).obj, a, b, c, d, e, f, g )
 172|#define  INF_MACRO_SR7( Inf, method, type, func, thisScT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, t,a,b,c,d,e,f,g ) \
 173|  ((t)->method(t, a,b,c,d,e,f,g))
 174|#define  INF_MACRO_PR7( Inf, method, type, func, thisScT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, t,a,b,c,d,e,f,g ) \
 175|  ((t).sc->method( t,a,b,c,d,e,f,g ))
 176|
 177|
 178| 
 179|/***********************************************************************
 180|*  10. <<< [INF_FUNC_0, INF_FUNC_1] インターフェイス関数の定義 >>> 
 181|*  11. <<< [INF_FUNC_2, INF_FUNC_3, INF_FUNC_4, INF_FUNC_5] >>>
 182|*  12. <<< [INF_FUNC_6, INF_FUNC_7] >>>
 183|*  13. <<< [INF_FUNC_R0, INF_FUNC_R1, INF_FUNC_R2, INF_FUNC_R3] >>>
 184|*  14. <<< [INF_FUNC_R4, INF_FUNC_R5, INF_FUNC_R6, INF_FUNC_R7] >>>
 185|*  15. <<< [INF_FUNC_SR0, INF_FUNC_SR1, INF_FUNC_SR2, INF_FUNC_SR3] >>>
 186|*  16. <<< [INF_FUNC_SR4, INF_FUNC_SR5, INF_FUNC_SR6, INF_FUNC_SR7] >>>
 187|*  17. <<< [INF_FUNC_PR0, INF_FUNC_PR1, INF_FUNC_PR2, INF_FUNC_PR3] >>>
 188|*  18. <<< [INF_FUNC_PR4, INF_FUNC_PR5, INF_FUNC_PR6, INF_FUNC_PR7] >>>
 189|*【引数】
 190|*  ・Inf;    インターフェイスの型名
 191|*  ・method; 内部関数ポインタ名
 192|*  ・type;   返り値の型
 193|*  ・func;   メンバ関数名
 194|*  ・thisT;  引数の型
 195|*  ・argtX;  引数の型
 196|*  ・thisScT;  スキーマへのポインタ型、または Inf_Pac 型
 197|*【補足】
 198|*・インターフェイスのソースファイル(*.c)のグローバル領域に書きます。
 199|*・INF_MACRO_0 などと同じ機能なので、マクロで条件分岐するなどして、
 200|*  どちらかのみ使用します。
 201|*・関数に返り値がある場合、INF_FUNC_R0 などを使用します。(R=Return)
 202|*・多態性を持った初期化のように第1引数がスキーマの場合は INF_FUNC_SR0
 203|*  などを使用します。(SR=Schema and Return)
 204|*・第1引数が、サブクラス・パラメータに対応したパラメタライズド・クラス
 205|*  の場合は、INF_FUNC_PR0 などを使用します。(PR=Paramatorized class and Return)
 206|*・関数版は、アドレスのエラーチェックを行います。
 207|*  エラーの場合、INF_SUB_SC_METHOD_NULL によって、
 208|*  インターフェイスが実行するインプリメント・クラスの関数が定義されていないか、
 209|*  インターフェイスが初期化されていない可能性があります。
 210|************************************************************************/
 211|#define  INF_FUNC_0( Inf, method, type, func, thisT, t ) \
 212|  type  func( thisT self ) \
 213|  { \
 214|    ASSERT( self.sc != NULL ); \
 215|    ASSERT( self.sc->method != NULL ); \
 216|    ((Inf##_Sc*)self.sc)->method( self.obj ); \
 217|  }
 218|
 219|#define  INF_FUNC_1( Inf, method, type, func, thisT,arg1T, t,a ) \
 220|  type  func( thisT self, arg1T arg1 ) \
 221|  { \
 222|    ASSERT( self.sc != NULL ); \
 223|    ASSERT( self.sc->method != NULL ); \
 224|    ((Inf##_Sc*)self.sc)->method( self.obj, arg1 ); \
 225|  }
 226|
 227|#define  INF_FUNC_2( Inf, method, type, func, thisT,arg1T,arg2T, t,a,b ) \
 228|  type  func( thisT self, arg1T arg1, arg2T arg2 ) \
 229|  { \
 230|    ASSERT( self.sc != NULL ); \
 231|    ASSERT( self.sc->method != NULL ); \
 232|    ((Inf##_Sc*)self.sc)->method( self.obj, arg1, arg2 ); \
 233|  }
 234|
 235|#define  INF_FUNC_3( Inf, method, type, func, thisT,arg1T,arg2T,arg3T, t,a,b,c ) \
 236|  type  func( thisT self, arg1T arg1, arg2T arg2, arg3T arg3 ) \
 237|  { \
 238|    ASSERT( self.sc != NULL ); \
 239|    ASSERT( self.sc->method != NULL ); \
 240|    ((Inf##_Sc*)self.sc)->method( self.obj, arg1, arg2, arg3 ); \
 241|  }
 242|
 243|#define  INF_FUNC_4( Inf, method, type, func, thisT,arg1T,arg2T,arg3T,arg4T, t,a,b,c,d ) \
 244|  type  func( thisT self, arg1T arg1, arg2T arg2, arg3T arg3, arg4T arg4 ) \
 245|  { \
 246|    ASSERT( self.sc != NULL ); \
 247|    ASSERT( self.sc->method != NULL ); \
 248|    ((Inf##_Sc*)self.sc)->method( self.obj, arg1, arg2, arg3, arg4 ); \
 249|  }
 250|
 251|#define  INF_FUNC_5( Inf, method, type, func, thisT,arg1T,arg2T,arg3T,arg4T,arg5T, t,a,b,c,d,e ) \
 252|  type  func( thisT self, arg1T arg1, arg2T arg2, arg3T arg3, arg4T arg4, arg5T arg5 ) \
 253|  { \
 254|    ASSERT( self.sc != NULL ); \
 255|    ASSERT( self.sc->method != NULL ); \
 256|    ((Inf##_Sc*)self.sc)->method( self.obj, arg1, arg2, arg3, arg4, arg5 ); \
 257|  }
 258|
 259|#define  INF_FUNC_6( Inf, method, type, func, thisT,arg1T,arg2T,arg3T,arg4T,arg5T,arg6T, t,a,b,c,d,e,f ) \
 260|  type  func( thisT self, arg1T arg1, arg2T arg2, arg3T arg3, arg4T arg4, arg5T arg5, arg6T arg6 ) \
 261|  { \
 262|    ASSERT( self.sc != NULL ); \
 263|    ASSERT( self.sc->method != NULL ); \
 264|    ((Inf##_Sc*)self.sc)->method( self.obj, arg1, arg2, arg3, arg4, arg5, arg6 ); \
 265|  }
 266|
 267|#define  INF_FUNC_7( Inf, method, type, func, thisT,arg1T,arg2T,arg3T,arg4T,arg5T,arg6T,arg7T, t,a,b,c,d,e,f,g ) \
 268|  type  func( thisT self, arg1T arg1, arg2T arg2, arg3T arg3, arg4T arg4, arg5T arg5, arg6T arg6, arg7T arg7 ) \
 269|  { \
 270|    ASSERT( self.sc != NULL ); \
 271|    ASSERT( self.sc->method != NULL ); \
 272|    ((Inf##_Sc*)self.sc)->method( self.obj, arg1, arg2, arg3, arg4, arg5, arg6, arg7 ); \
 273|  }
 274|
 275|#define  INF_FUNC_R0( Inf, method, type, func, thisT, t ) \
 276|  type  func( thisT self ) \
 277|  { \
 278|    ASSERT( self.sc != NULL ); \
 279|    ASSERT( self.sc->method != NULL ); \
 280|    return  ((Inf##_Sc*)self.sc)->method( self.obj ); \
 281|  }
 282|
 283|#define  INF_FUNC_R1( Inf, method, type, func, thisT, arg1T, t,a ) \
 284|  type  func( thisT self, arg1T arg1 ) \
 285|  { \
 286|    ASSERT( self.sc != NULL ); \
 287|    ASSERT( self.sc->method != NULL ); \
 288|    return  ((Inf##_Sc*)self.sc)->method( self.obj, arg1 ); \
 289|  }
 290|
 291|#define  INF_FUNC_R2( Inf, method, type, func, thisT, arg1T, arg2T, t,a,b ) \
 292|  type  func( thisT self, arg1T arg1, arg2T arg2 ) \
 293|  { \
 294|    ASSERT( self.sc != NULL ); \
 295|    ASSERT( self.sc->method != NULL ); \
 296|    return  ((Inf##_Sc*)self.sc)->method( self.obj, arg1, arg2 ); \
 297|  }
 298|
 299|#define  INF_FUNC_R3( Inf, method, type, func, thisT,arg1T,arg2T,arg3T, t,a,b,c ) \
 300|  type  func( thisT self, arg1T arg1, arg2T arg2, arg3T arg3 ) \
 301|  { \
 302|    ASSERT( self.sc != NULL ); \
 303|    ASSERT( self.sc->method != NULL ); \
 304|    return  ((Inf##_Sc*)self.sc)->method( self.obj, arg1, arg2, arg3 ); \
 305|  }
 306|
 307|#define  INF_FUNC_R4( Inf, method, type, func, thisT,arg1T,arg2T,arg3T,arg4T, t,a,b,c,d ) \
 308|  type  func( thisT self, arg1T arg1, arg2T arg2, arg3T arg3, arg4T arg4 ) \
 309|  { \
 310|    ASSERT( self.sc != NULL ); \
 311|    ASSERT( self.sc->method != NULL ); \
 312|    return  ((Inf##_Sc*)self.sc)->method( self.obj, arg1, arg2, arg3, arg4 ); \
 313|  }
 314|
 315|#define  INF_FUNC_R5( Inf, method, type, func, thisT,arg1T,arg2T,arg3T,arg4T,arg5T, t,a,b,c,d,e ) \
 316|  type  func( thisT self, arg1T arg1, arg2T arg2, arg3T arg3, arg4T arg4, arg5T arg5 ) \
 317|  { \
 318|    ASSERT( self.sc != NULL ); \
 319|    ASSERT( self.sc->method != NULL ); \
 320|    return  ((Inf##_Sc*)self.sc)->method( self.obj, arg1, arg2, arg3, arg4, arg5 ); \
 321|  }
 322|
 323|#define  INF_FUNC_R6( Inf, method, type, func, thisT,arg1T,arg2T,arg3T,arg4T,arg5T,arg6T, t,a,b,c,d,e,f ) \
 324|  type  func( thisT self, arg1T arg1, arg2T arg2, arg3T arg3, arg4T arg4, arg5T arg5, arg6T arg6 ) \
 325|  { \
 326|    ASSERT( self.sc != NULL ); \
 327|    ASSERT( self.sc->method != NULL ); \
 328|    return  ((Inf##_Sc*)self.sc)->method( self.obj, arg1, arg2, arg3, arg4, arg5, arg6 ); \
 329|  }
 330|
 331|#define  INF_FUNC_R7( Inf, method, type, func, thisT,arg1T,arg2T,arg3T,arg4T,arg5T,arg6T,arg7T, t,a,b,c,d,e,f,g ) \
 332|  type  func( thisT self, arg1T arg1, arg2T arg2, arg3T arg3, arg4T arg4, arg5T arg5, arg6T arg6, arg7T arg7 ) \
 333|  { \
 334|    ASSERT( self.sc != NULL ); \
 335|    ASSERT( self.sc->method != NULL ); \
 336|    return  ((Inf##_Sc*)self.sc)->method( self.obj, arg1, arg2, arg3, arg4, arg5, arg6, arg7 ); \
 337|  }
 338|
 339|
 340|#define  INF_FUNC_SR0( Inf, method, type, func, thisScT, t ) \
 341|  type  func( thisScT self ) \
 342|  { \
 343|    ASSERT( self != NULL ); \
 344|    ASSERT( self->method != NULL ); \
 345|    return  self->method( self ); \
 346|  }
 347|
 348|#define  INF_FUNC_SR1( Inf, method, type, func, thisScT, arg1T, t,a ) \
 349|  type  func( thisScT self, arg1T arg1 ) \
 350|  { \
 351|    ASSERT( self != NULL ); \
 352|    ASSERT( self->method != NULL ); \
 353|    return  self->method(self, arg1); \
 354|  }
 355|
 356|#define  INF_FUNC_SR2( Inf, method, type, func, thisScT, arg1T, arg2T, t,a,b ) \
 357|  type  func( thisScT self, arg1T arg1, arg2T arg2 ) \
 358|  { \
 359|    ASSERT( self != NULL ); \
 360|    ASSERT( self->method != NULL ); \
 361|    return  self->method(self, arg1, arg2); \
 362|  }
 363|
 364|#define  INF_FUNC_SR3( Inf, method, type, func, thisScT, arg1T, arg2T, arg3T, t,a,b,c ) \
 365|  type  func( thisScT self, arg1T arg1, arg2T arg2, arg3T arg3 ) \
 366|  { \
 367|    ASSERT( self != NULL ); \
 368|    ASSERT( self->method != NULL ); \
 369|    return  self->method(self, arg1, arg2, arg3); \
 370|  }
 371|
 372|#define  INF_FUNC_SR4( Inf, method, type, func, thisScT, arg1T, arg2T, arg3T, arg4T, t,a,b,c,d ) \
 373|  type  func( thisScT self, arg1T arg1, arg2T arg2, arg3T arg3, arg4T arg4 ) \
 374|  { \
 375|    ASSERT( self != NULL ); \
 376|    ASSERT( self->method != NULL ); \
 377|    return  self->method(self, arg1, arg2, arg3, arg4); \
 378|  }
 379|
 380|#define  INF_FUNC_SR5( Inf, method, type, func, thisScT, arg1T, arg2T, arg3T, arg4T, arg5T, t,a,b,c,d,e ) \
 381|  type  func( thisScT self, arg1T arg1, arg2T arg2, arg3T arg3, arg4T arg4, arg5T arg5 ) \
 382|  { \
 383|    ASSERT( self != NULL ); \
 384|    ASSERT( self->method != NULL ); \
 385|    return  self->method(self, arg1, arg2, arg3, arg4, arg5); \
 386|  }
 387|
 388|#define  INF_FUNC_SR6( Inf, method, type, func, thisScT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, t,a,b,c,d,e,f ) \
 389|  type  func( thisScT self, arg1T arg1, arg2T arg2, arg3T arg3, arg4T arg4, arg5T arg5, arg6T arg6 ) \
 390|  { \
 391|    ASSERT( self != NULL ); \
 392|    ASSERT( self->method != NULL ); \
 393|    return  self->method(self, arg1, arg2, arg3, arg4, arg5, arg6); \
 394|  }
 395|
 396|#define  INF_FUNC_SR7( Inf, method, type, func, thisScT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, t,a,b,c,d,e,f,g ) \
 397|  type  func( thisScT self, arg1T arg1, arg2T arg2, arg3T arg3, arg4T arg4, arg5T arg5, arg6T arg6, arg7T arg7 ) \
 398|  { \
 399|    ASSERT( self != NULL ); \
 400|    ASSERT( self->method != NULL ); \
 401|    return  self->method(self, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
 402|  }
 403|
 404|
 405|#define  INF_FUNC_PR1( Inf, method, type, func, thisScT, arg1T, t,a ) \
 406|  type  func( thisScT self, arg1T arg1 ) \
 407|  { \
 408|    ASSERT( self.sc->method != NULL ); \
 409|    return  self.sc->method( self, arg1 ); \
 410|  }
 411|
 412|#define  INF_FUNC_PR2( Inf, method, type, func, thisScT, arg1T, arg2T, t,a,b ) \
 413|  type  func( thisScT self, arg1T arg1, arg2T arg2 ) \
 414|  { \
 415|    ASSERT(self.sc->method != NULL ); \
 416|    return self.sc->method(self, arg1, arg2); \
 417|  }
 418|
 419|#define  INF_FUNC_PR3( Inf, method, type, func, thisScT, arg1T, arg2T, arg3T, t,a,b,c ) \
 420|  type  func( thisScT self, arg1T arg1, arg2T arg2, arg3T arg3 ) \
 421|  { \
 422|    ASSERT(self.sc->method != NULL ); \
 423|    return self.sc->method(self, arg1, arg2, arg3); \
 424|  }
 425|
 426|#define  INF_FUNC_PR4( Inf, method, type, func, thisScT, arg1T, arg2T, arg3T, arg4T, t,a,b,c,d ) \
 427|  type  func( thisScT self, arg1T arg1, arg2T arg2, arg3T arg3, arg4T arg4 ) \
 428|  { \
 429|    ASSERT(self.sc->method != NULL ); \
 430|    return self.sc->method(self, arg1, arg2, arg3, arg4); \
 431|  }
 432|
 433|#define  INF_FUNC_PR5( Inf, method, type, func, thisScT, arg1T, arg2T, arg3T, arg4T, arg5T, t,a,b,c,d,e ) \
 434|  type  func( thisScT self, arg1T arg1, arg2T arg2, arg3T arg3, arg4T arg4, arg5T arg5 ) \
 435|  { \
 436|    ASSERT(self.sc->method != NULL ); \
 437|    return self.sc->method(self, arg1, arg2, arg3, arg4, arg5); \
 438|  }
 439|
 440|#define  INF_FUNC_PR6( Inf, method, type, func, thisScT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, t,a,b,c,d,e,f ) \
 441|  type  func( thisScT self, arg1T arg1, arg2T arg2, arg3T arg3, arg4T arg4, arg5T arg5, arg6T arg6 ) \
 442|  { \
 443|    ASSERT(self.sc->method != NULL ); \
 444|    return self.sc->method(self, arg1, arg2, arg3, arg4, arg5, arg6); \
 445|  }
 446|
 447|#define  INF_FUNC_PR7( Inf, method, type, func, thisScT, arg1T, arg2T, arg3T, arg4T, arg5T, arg6T, arg7T, t,a,b,c,d,e,f,g ) \
 448|  type  func( thisScT self, arg1T arg1, arg2T arg2, arg3T arg3, arg4T arg4, arg5T arg5, arg6T arg6, arg7T arg7 ) \
 449|  { \
 450|    ASSERT(self.sc->method != NULL ); \
 451|    return self.sc->method(self, arg1, arg2, arg3, arg4, arg5, arg6, arg7); \
 452|  }
 453| 
 454|/*-------------------------------------------------------------------*/
 455|/* 19. <<< ◆インプリメント・クラス >>> */ 
 456|/*-------------------------------------------------------------------*/
 457| 
 458|/***********************************************************************
 459|*  20. <<< [INF_SUB_FUNC_START] インプリメント・クラスの関数定義の開始 >>> 
 460|*  21. <<< [INF_SUB_FUNC_END] インプリメント・クラスの関数定義の終了 >>>
 461|*  22. <<< [INF_SUB_FUNC_OVERRIDE] 関連を継承する >>>
 462|*  23. <<< [INF_SUB_FUNC_NULL] インターフェイスと関数を関連付けしない >>>
 463|*  24. <<< [INF_SUB_FUNC_0] インターフェイスと関数の関連の記述(引数が0個の関数)>>>
 464|*  25. <<< [INF_SUB_FUNC_1, INF_SUB_FUNC_2, INF_SUB_FUNC_3] >>>
 465|*  26. <<< [INF_SUB_FUNC_4, INF_SUB_FUNC_5, INF_SUB_FUNC_6, INF_SUB_FUNC_7] >>>
 466|*  27. <<< [INF_SUB_FUNC_R0, INF_SUB_FUNC_R1, INF_SUB_FUNC_R2, INF_SUB_FUNC_R3] >>>
 467|*  28. <<< [INF_SUB_FUNC_R4, INF_SUB_FUNC_R5, INF_SUB_FUNC_R6, INF_SUB_FUNC_R7] >>>
 468|*  29. <<< [INF_SUB_FUNC_SR0, INF_SUB_FUNC_SR1, INF_SUB_FUNC_SR2, INF_SUB_FUNC_SR3] >>>
 469|*  30. <<< [INF_SUB_FUNC_SR4, INF_SUB_FUNC_SR5, INF_SUB_FUNC_SR6, INF_SUB_FUNC_SR7] >>>
 470|*  31. <<< [INF_SUB_FUNC_PR0, INF_SUB_FUNC_PR1, INF_SUB_FUNC_PR2, INF_SUB_FUNC_PR3] >>>
 471|*  32. <<< [INF_SUB_FUNC_PR4, INF_SUB_FUNC_PR5, INF_SUB_FUNC_PR6, INF_SUB_FUNC_PR7] >>>
 472|*【引数】
 473|*  ・Inf;    インターフェイスの型名
 474|*  ・Sub;    インプリメント・クラスの型名
 475|*  ・method; 内部関数ポインタ名
 476|*  ・type;   返り値の型
 477|*  ・func;   メンバ関数名
 478|*  ・thisT;  引数の型
 479|*  ・argTX;  引数の型
 480|*【補足】
 481|*・このマクロによって、以下のものが定義されます。
 482|*  ・インプリメント・クラスのスキーマ・グローバル構造体
 483|*     Inf_Sc  Sub_sc_Inf;
 484|*  ・インプリメント・クラスのスキーマを返す関数
 485|*     Inf_Sc*  Sub_getSc_Inf_Sc(void);
 486|*  ・インプリメント・クラスの先頭アドレスからインターフェイスを返す関数
 487|*     Inf  Sub_inf_Inf( SubType* );
 488|*  ・インターフェイスからインプリメント・クラスの先頭アドレスを返す関数
 489|*     Sub*  Sub_by_Inf( Inf inf );
 490|*・INF_SUB_FUNC_OVERRIDE は、既存のインターフェイスの差分のみを
 491|*  記述するときに使用します。INF_SUB_FUNC_START の直後に記述します。
 492|*  その後に、インプリメントの関数が異なる関数のみ、INF_SUB_FUNC_...
 493|*  マクロを記述します。
 494|*・INF_SUB_FUNC_R0 など末尾の数字の前に
 495|*  R が付いているマクロは、返り値を返すインターフェイスに使用します。
 496|*  SR が付いているマクロは、第1引数がスキーマのインターフェイスに使用します。
 497|*・INF_SUB_FUNC_NULL で指定したインターフェイスは、そのインターフェイスが
 498|*  内部的に持っている関数ポインタを NULL にします。デバッグバージョンでは、
 499|*  そのインターフェイスを用いた呼び出しを行うと、ASSERT にかかります。
 500|*・INF_SUB_FUNC_... は、関数の内部で記述することもできます。
 501|*  INF_SUB_FUNC_... をプロセスが通ると、スキーマのメンバ変数の値が変化します。
 502|*  スキーマを返す関数(getSc)を流用して、一部をオーバーライドするときに使います。
 503|*・NDEBUG マクロが定義されていない場合、エラーチェックをします。
 504|*  エラーの場合、インターフェイスが指しているインプリメント・クラスが、
 505|*  指定のものと異なるか、インターフェイスが初期化されていない
 506|*  可能性があります。
 507|************************************************************************/
 508|#define  INF_SUB_FUNC_START( Inf, Sub ) \
 509|  Inf##_Sc  Sub##_sc_##Inf; \
 510| \
 511|  Inf##_Sc*  Sub##_getSc_##Inf##_Sc() \
 512|  { \
 513|    static int  initialized = 0; \
 514|    if ( ! initialized ) {
 515|
 516|
 517|#define  INF_SUB_FUNC_END( Inf, Sub ) \
 518|      initialized = 1; \
 519|    } \
 520|    return  &Sub##_sc_##Inf; \
 521|  } \
 522| \
 523|  Sub*  Sub##_by_##Inf( Inf inf )  /* Sub が typedef されていないとここでエラー */ \
 524|  { \
 525|    ASSERT( inf.sc == &Sub##_sc_##Inf ); \
 526|    return  (Sub*)inf.obj; \
 527|  } \
 528| \
 529|  Inf  Sub##_inf_##Inf( Sub* self ) \
 530|  { \
 531|    Inf  inf; \
 532|  \
 533|    inf.sc = Sub##_getSc_##Inf##_Sc(); \
 534|    inf.obj = self; \
 535|    return  inf; \
 536|  }
 537|
 538|
 539|#define  INF_SUB_FUNC_OVERRIDE( Inf, Sub, Super ) \
 540|      Sub##_sc_##Inf = *Super##_getSc_##Inf##_Sc();
 541|
 542|#define  INF_SUB_FUNC_NULL( Inf, Sub, method ) \
 543|      Sub##_sc_##Inf.method = NULL;
 544|
 545|#define  INF_SUB_FUNC_R0  INF_SUB_FUNC_0
 546|#define  INF_SUB_FUNC_0( Inf, Sub, method, type, func, thisT, t ) \
 547|      Sub##_sc_##Inf.method = (type(*)(void*)) func;
 548|#define  INF_SUB_FUNC_SR0( Inf, Sub, method, type, func, thisT, t ) \
 549|      Sub##_sc_##Inf.method = (type(*)(thisT)) func;
 550|#define  INF_SUB_FUNC_PR0  INF_SUB_FUNC_SR0
 551|
 552|#define  INF_SUB_FUNC_R1  INF_SUB_FUNC_1
 553|#define  INF_SUB_FUNC_1( Inf, Sub, method, type, func, thisT, argT1, t,a ) \
 554|      Sub##_sc_##Inf.method = (type(*)(void*,argT1)) func;
 555|#define  INF_SUB_FUNC_SR1( Inf, Sub, method, type, func, thisT, argT1, t,a ) \
 556|      Sub##_sc_##Inf.method = (type(*)(thisT,argT1)) func;
 557|#define  INF_SUB_FUNC_PR1  INF_SUB_FUNC_SR1
 558|
 559|#define  INF_SUB_FUNC_R2  INF_SUB_FUNC_2
 560|#define  INF_SUB_FUNC_2( Inf, Sub, method, type, func, thisT, argT1, argT2, t,a,b ) \
 561|      Sub##_sc_##Inf.method = (type(*)(void*,argT1,argT2)) func;
 562|#define  INF_SUB_FUNC_SR2( Inf, Sub, method, type, func, thisT, argT1, argT2, t,a,b ) \
 563|      Sub##_sc_##Inf.method = (type(*)(thisT,argT1,argT2)) func;
 564|#define  INF_SUB_FUNC_PR2  INF_SUB_FUNC_SR2
 565|
 566|#define  INF_SUB_FUNC_R3  INF_SUB_FUNC_3
 567|#define  INF_SUB_FUNC_3( Inf, Sub, method, type, func, thisT, argT1, argT2, argT3, t,a,b,c ) \
 568|      Sub##_sc_##Inf.method = (type(*)(void*,argT1,argT2,argT3)) func;
 569|#define  INF_SUB_FUNC_SR3( Inf, Sub, method, type, func, thisT, argT1, argT2, argT3, t,a,b,c ) \
 570|      Sub##_sc_##Inf.method = (type(*)(thisT,argT1,argT2,argT3)) func;
 571|#define  INF_SUB_FUNC_PR3  INF_SUB_FUNC_SR3
 572|
 573|#define  INF_SUB_FUNC_R4  INF_SUB_FUNC_4
 574|#define  INF_SUB_FUNC_4( Inf, Sub, method, type, func, thisT, argT1, argT2, argT3, argT4, t,a,b,c,d ) \
 575|      Sub##_sc_##Inf.method = (type(*)(void*,argT1,argT2,argT3,argT4)) func;
 576|#define  INF_SUB_FUNC_SR4( Inf, Sub, method, type, func, thisT, argT1, argT2, argT3, argT4, t,a,b,c,d ) \
 577|      Sub##_sc_##Inf.method = (type(*)(thisT,argT1,argT2,argT3,argT4)) func;
 578|#define  INF_SUB_FUNC_PR4  INF_SUB_FUNC_SR4
 579|
 580|#define  INF_SUB_FUNC_R5  INF_SUB_FUNC_5
 581|#define  INF_SUB_FUNC_5( Inf, Sub, method, type, func, thisT, argT1, argT2, argT3, argT4, argT5, t,a,b,c,d,e ) \
 582|      Sub##_sc_##Inf.method = (type(*)(void*,argT1,argT2,argT3,argT4,argT5)) func;
 583|#define  INF_SUB_FUNC_SR5( Inf, Sub, method, type, func, thisT, argT1, argT2, argT3, argT4, argT5, t,a,b,c,d,e ) \
 584|      Sub##_sc_##Inf.method = (type(*)(thisT,argT1,argT2,argT3,argT4,argT5)) func;
 585|#define  INF_SUB_FUNC_PR5  INF_SUB_FUNC_SR5
 586|
 587|#define  INF_SUB_FUNC_R6  INF_SUB_FUNC_6
 588|#define  INF_SUB_FUNC_6( Inf, Sub, method, type, func, thisT, argT1, argT2, argT3, argT4, argT5, argT6, t,a,b,c,d,e,f ) \
 589|      Sub##_sc_##Inf.method = (type(*)(void*,argT1,argT2,argT3,argT4,argT5,argT6)) func;
 590|#define  INF_SUB_FUNC_SR6( Inf, Sub, method, type, func, thisT, argT1, argT2, argT3, argT4, argT5, argT6, t,a,b,c,d,e,f ) \
 591|      Sub##_sc_##Inf.method = (type(*)(thisT,argT1,argT2,argT3,argT4,argT5,argT6)) func;
 592|#define  INF_SUB_FUNC_PR6  INF_SUB_FUNC_SR6
 593|
 594|#define  INF_SUB_FUNC_R7  INF_SUB_FUNC_7
 595|#define  INF_SUB_FUNC_7( Inf, Sub, method, type, func, thisT, argT1, argT2, argT3, argT4, argT5, argT6, argT7, t,a,b,c,d,e,f,g ) \
 596|      Sub##_sc_##Inf.method = (type(*)(void*,argT1,argT2,argT3,argT4,argT5,argT6,argT7)) func;
 597|#define  INF_SUB_FUNC_SR7( Inf, Sub, method, type, func, thisT, argT1, argT2, argT3, argT4, argT5, argT6, argT7, t,a,b,c,d,e,f,g ) \
 598|      Sub##_sc_##Inf.method = (type(*)(thisT,argT1,argT2,argT3,argT4,argT5,argT6,argT7)) func;
 599|#define  INF_SUB_FUNC_PR7  INF_SUB_FUNC_SR7
 600|
 601|
 602| 
 603|/***********************************************************************
 604|*  33. <<< [INF_SUB_PACFUNC1] Inf_Pac を返す関数の定義 >>> 
 605|*  34. <<< [INF_SUB_PACFUNC2] [INF_SUB_PACFUNC3] [INF_SUB_PACFUNC4]  >>>
 606|*  35. <<< [INF_SUB_PACFUNC4] [INF_SUB_PACFUNC6] [INF_SUB_PACFUNC7]  >>>
 607|*【引数】
 608|*  ・Inf;    インターフェイスの型名
 609|*  ・Sub;    インプリメント・クラスの型名
 610|*  ・paramT;  サブクラス・パラメータ の構造体名、(サブクラス名)+ _Param
 611|*  ・argTX;  引数の型
 612|*  ・a,b,c... ;  構造体のメンバ変数名
 613|*【補足】
 614|*・本マクロは、INF_SUB_FUNC_END より後に宣言します。
 615|*・このマクロによって、以下の関数が定義されます。
 616|*     Inf_Pac  Sub_getPac_Inf( Sub_Param*, ... );
 617|************************************************************************/
 618|
 619|#define  INF_SUB_PACFUNC1( Inf, Sub, paramT, argT1, a ) \
 620| Inf##_Pac  Sub##_getPac_##Inf( paramT param, argT1 a ) \
 621| { \
 622|  Inf##_Pac  pac; \
 623| \
 624|  pac.sc = Sub##_getSc_##Inf##_Sc(); \
 625|  pac.param = param; \
 626|  param->a = a; \
 627| \
 628|  return  pac; \
 629|}
 630|
 631|
 632|#define  INF_SUB_PACFUNC2( Inf, Sub, paramT, argT1, a, argT2, b ) \
 633| Inf##_Pac  Sub##_getPac_##Inf( paramT param, argT1 a, argT2 b ) \
 634| { \
 635|  Inf##_Pac  pac; \
 636| \
 637|  pac.sc = Sub##_getSc_##Inf##_Sc(); \
 638|  pac.param = param; \
 639|  param->a = a; \
 640|  param->b = b; \
 641| \
 642|  return  pac; \
 643|}
 644|
 645|
 646|#define  INF_SUB_PACFUNC3( Inf, Sub, paramT, argT1, a, argT2, b, argT3, c ) \
 647| Inf##_Pac  Sub##_getPac_##Inf( paramT param, argT1 a, argT2 b, argT3 c ) \
 648| { \
 649|  Inf##_Pac  pac; \
 650| \
 651|  pac.sc = Sub##_getSc_##Inf##_Sc(); \
 652|  pac.param = param; \
 653|  param->a = a; \
 654|  param->b = b; \
 655|  param->c = c; \
 656| \
 657|  return  pac; \
 658|}
 659|
 660|
 661|#define  INF_SUB_PACFUNC4( Inf, Sub, paramT, argT1, a, argT2, b, argT3, c, argT4, d ) \
 662| Inf##_Pac  Sub##_getPac_##Inf( paramT param, argT1 a, argT2 b, argT3 c, argT4 d ) \
 663| { \
 664|  Inf##_Pac  pac; \
 665| \
 666|  pac.sc = Sub##_getSc_##Inf##_Sc(); \
 667|  pac.param = param; \
 668|  param->a = a; \
 669|  param->b = b; \
 670|  param->c = c; \
 671|  param->d = d; \
 672| \
 673|  return  pac; \
 674|}
 675|
 676|
 677|#define  INF_SUB_PACFUNC5( Inf, Sub, paramT, argT1, a, argT2, b, argT3, c, argT4, d, argT5, e ) \
 678| Inf##_Pac  Sub##_getPac_##Inf( paramT param, argT1 a, argT2 b, argT3 c, argT4 d, argT5 e ) \
 679| { \
 680|  Inf##_Pac  pac; \
 681| \
 682|  pac.sc = Sub##_getSc_##Inf##_Sc(); \
 683|  pac.param = param; \
 684|  param->a = a; \
 685|  param->b = b; \
 686|  param->c = c; \
 687|  param->d = d; \
 688|  param->e = e; \
 689| \
 690|  return  pac; \
 691|}
 692|
 693|
 694|#define  INF_SUB_PACFUNC6( Inf, Sub, paramT, argT1, a, argT2, b, argT3, c, argT4, d, argT5, e, argT6, f ) \
 695| Inf##_Pac  Sub##_getPac_##Inf( paramT param, argT1 a, argT2 b, argT3 c, argT4 d, argT5 e, argT6 f ) \
 696| { \
 697|  Inf##_Pac  pac; \
 698| \
 699|  pac.sc = Sub##_getSc_##Inf##_Sc(); \
 700|  pac.param = param; \
 701|  param->a = a; \
 702|  param->b = b; \
 703|  param->c = c; \
 704|  param->d = d; \
 705|  param->e = e; \
 706|  param->f = f; \
 707| \
 708|  return  pac; \
 709|}
 710|
 711|
 712|#define  INF_SUB_PACFUNC7( Inf, Sub, paramT, argT1, a, argT2, b, argT3, c, argT4, d, argT5, e, argT6, f, argT7, g ) \
 713| Inf##_Pac  Sub##_getPac_##Inf( paramT* param, argT1 a, argT2 b, argT3 c, argT4 d, argT5 e, argT6 f, argT7 g ) \
 714| { \
 715|  Inf##_Pac  pac; \
 716| \
 717|  pac.sc = Sub##_getSc_##Inf##_Sc(); \
 718|  pac.param = param; \
 719|  param->a = a; \
 720|  param->b = b; \
 721|  param->c = c; \
 722|  param->d = d; \
 723|  param->e = e; \
 724|  param->f = f; \
 725|  param->g = g; \
 726| \
 727|  return  pac; \
 728|}
 729|
 730|
 731| 
 732|/*-------------------------------------------------------------------*/
 733|/* 36. <<< ◆メソッド・ポインタ >>> */ 
 734|/*-------------------------------------------------------------------*/
 735| 
 736|/***********************************************************************
 737|*  37. <<< [Inf_Mp] メソッド・ポインタ >>> 
 738|************************************************************************/
 739|struct _Inf_Mp {
 740|  void*  obj;
 741|  int  (*func)();
 742|  #ifndef  NDEBUG
 743|    int  nArg;
 744|  #endif
 745|};
 746|
 747|#ifdef  NDEBUG
 748|
 749|#ifdef  __cplusplus
 750|  #define  Inf_Mp_init( this, _obj, _func, _nArg ) \
 751|    ( (this)->obj = _obj, (this)->func = reinterpret_cast<int (*)()>(_func) )
 752|#else
 753|  #define  Inf_Mp_init( this, _obj, _func, _nArg ) \
 754|    ( (this)->obj = _obj, (this)->func = (int (*)())_func )
 755|#endif
 756|
 757|#define  Inf_Mp_call0( this ) \
 758|  ( *(this)->func )( (this)->obj )
 759|
 760|#define  Inf_Mp_call1( this, a ) \
 761|  ( *(this)->func )( (this)->obj, a )
 762|
 763|#define  Inf_Mp_call2( this, a,b ) \
 764|  ( *(this)->func )( (this)->obj, a,b )
 765|
 766|#define  Inf_Mp_call3( this, a,b,c ) \
 767|  ( (int (*)(void*,int,int,int)) *(this)->func )( (this)->obj, (int)(a),(int)(b),(int)(c) )
 768|
 769|#define  Inf_Mp_call4( this, a,b,c,d ) \
 770|  ( *(this)->func )( (this)->obj, a,b,c,d )
 771|
 772|#define  Inf_Mp_call5( this, a,b,c,d,e ) \
 773|  ( *(this)->func )( (this)->obj, a,b,c,d,e )
 774|
 775|#define  Inf_Mp_call6( this, a,b,c,d,e,f ) \
 776|  ( *(this)->func )( (this)->obj, a,b,c,d,e,f )
 777|
 778|#define  Inf_Mp_call7( this, a,b,c,d,e,f,g ) \
 779|  ( *(this)->func )( (this)->obj, a,b,c,d,e,f,g )
 780|
 781|#else
 782|
 783|
 784|#ifdef  __cplusplus
 785|  #define  Inf_Mp_init( this, _obj, _func, _nArg ) \
 786|    ( (this)->obj = _obj, (this)->func = reinterpret_cast<int (*)()>(_func) )
 787|#else
 788|  #define  Inf_Mp_init( this, _obj, _func, _nArg ) \
 789|    ( (this)->obj = _obj, (this)->func = (int (*)())_func (this)->nArg = _nArg )
 790|#endif
 791|
 792|
 793|#define  Inf_Mp_call0( this ) \
 794|  ( (this)->nArg == 0 ? (*(this)->func)( (this)->obj ) : \
 795|     error2_1( Inf_Err_WrongNumOfParam, "パラメータの数が違います(%d)", (this)->nArg ) , 0 )
 796|
 797|#define  Inf_Mp_call1( this, a ) \
 798|  ( (this)->nArg == 1 ? (*(this)->func)( (this)->obj, a ) : \
 799|     error2_1( Inf_Err_WrongNumOfParam, "パラメータの数が違います(%d)", (this)->nArg ) , 0 )
 800|
 801|#define  Inf_Mp_call2( this, a,b ) \
 802|  ( (this)->nArg == 2 ? (*(this)->func)( (this)->obj, a,b ) : \
 803|     error2_1( Inf_Err_WrongNumOfParam, "パラメータの数が違います(%d)", (this)->nArg ) , 0 )
 804|
 805|#define  Inf_Mp_call3( this, a,b,c ) \
 806|  ( (this)->nArg == 3 ? \
 807|     ( (int (*)(void*,int,int,int)) *(this)->func )( (this)->obj, (int)(a),(int)(b),(int)(c) ) : \
 808|     error2_1( Inf_Err_WrongNumOfParam, "パラメータの数が違います(%d)", (this)->nArg ) , 0 )
 809|
 810|#define  Inf_Mp_call4( this, a,b,c,d ) \
 811|  ( (this)->nArg == 4 ? (*(this)->func)( (this)->obj, a,b,c,d ) : \
 812|     error2_1( Inf_Err_WrongNumOfParam, "パラメータの数が違います(%d)", (this)->nArg ) , 0 )
 813|
 814|#define  Inf_Mp_call5( this, a,b,c,d,e ) \
 815|  ( (this)->nArg == 5 ? (*(this)->func)( (this)->obj, a,b,c,d,e ) : \
 816|     error2_1( Inf_Err_WrongNumOfParam, "パラメータの数が違います(%d)", (this)->nArg ) , 0 )
 817|
 818|#define  Inf_Mp_call6( this, a,b,c,d,e,f ) \
 819|  ( (this)->nArg == 6 ? (*(this)->func)( (this)->obj, a,b,c,d,e,f ) : \
 820|     error2_1( Inf_Err_WrongNumOfParam, "パラメータの数が違います(%d)", (this)->nArg ) , 0 )
 821|
 822|#define  Inf_Mp_call7( this, a,b,c,d,e,f,g ) \
 823|  ( (this)->nArg == 7 ? (*(this)->func)( (this)->obj, a,b,c,d,e,f,g ) : \
 824|     error2_1( Inf_Err_WrongNumOfParam, "パラメータの数が違います(%d)", (this)->nArg ) , 0 )
 825|
 826|#endif
 827| 
 828|#ifdef  __cplusplus
 829|}
 830|#endif
 831|
 832|#endif  /* __INF_H */ 
 833| 
 834|