offset.c

C:\home\SVGCats_src\src\offset.c

[目次 | 関数]

目次

関数一覧


   1|/**************************************************************************
   2|*  1. <<< メンバ変数のオフセット (Offset) >>> 
   3|***************************************************************************/
   4|
   5|#include "mixer_precomp.h"  /* Auto precompiled header, Look at mixer-... folder */
   6|// #pragma hdrstop ("mixer_precomp")
   7|
   8|#if defined(USES_MXP_AUTOINC)
   9| #include "offset.ah"  /* Auto include header, Look at mixer-... folder */
  10|#endif
  11| 
  12|/*-------------------------------------------------------------------------*/
  13|/* 2. <<< ◆(Offset_Key) キー情報 >>>                                       */ 
  14|/*-------------------------------------------------------------------------*/
  15|
  16|
  17|#ifdef  USES_STDLIBS
  18|#ifndef  USES_MORI_STDLIB
  19| 
  20|/**************************************************************************
  21|*  3. <<< [Offset_Key_chk] 正規チェック >>> 
  22|***************************************************************************/
  23|int  Offset_Key_chk( Offset_Key* m )
  24|{
  25|  return  Offset_chk( m->offset ) &&
  26|    ( m->type == Offset_Int ||
  27|      m->type == Offset_Double ||
  28|      m->type == Offset_CString ||
  29|      m->type == Offset_CStringP ||
  30|      m->type == Offset_CStringPI ||
  31|      m->type == Offset_CStringPW ||
  32|      m->type == Offset_StrV ) &&
  33|    ( m->direc == Offset_Up ||
  34|      m->direc == Offset_Down ||
  35|      m->direc == Offset_NoDirec );
  36|}
  37| 
  38|/*************************************************************************	
  39|*  4. <<< [Offset_Key_isHit] キーがヒットするか判定する >>> 
  40|*【引数】
  41|*  ・void*  elem;   ヒットするか判定する要素
  42|*  ・void*  key;    判定に用いるキーの値が格納されているアドレス
  43|*  ・bool  返り値;  ヒットしたかどうか(true=ヒット)
  44|**************************************************************************/
  45|#ifdef  __STRING_H
  46|#if !defined(FOR_GHS) && !defined(FOR_CA) && !defined(FOR_WINCE)
  47|bool  Offset_Key_isHit( Offset_Key* m, const void* elem, const void* key )
  48|{
  49|  ASSERT( elem != NULL );
  50|
  51|  switch ( m->type ) {
  52|    case  Offset_CString:
  53|      return  strcmp( &Offset_ref( m->offset, elem, char ), key ) == 0;
  54|    case  Offset_CStringP:
  55|      ASSERT( Offset_ref( m->offset, elem, char* ) != NULL );
  56|      return  strcmp( Offset_ref( m->offset, elem, char* ), key ) == 0;
  57|    case  Offset_CStringPI:
  58|      ASSERT( Offset_ref( m->offset, elem, char* ) != NULL );
  59|      return  stricmp( Offset_ref( m->offset, elem, char* ), key ) == 0;
  60|    #ifdef  USES_STRX
  61|    case  Offset_CStringPW:
  62|      ASSERT( Offset_ref( m->offset, elem, char* ) != NULL );
  63|      return  StrX_cmpWild( Offset_ref( m->offset, elem, char* ), key ) == 0;
  64|    #endif
  65|    #ifdef  USES_STRV
  66|    case  Offset_StrV:
  67|      return  strcmp( Offset_ref( m->offset, elem, StrV ).p, key ) == 0;
  68|    #endif
  69|    default:
  70|      error();
  71|      return false;  /* dummy */
  72|  }
  73|}
  74|#endif
  75|#endif
  76| 
  77|/**************************************************************************
  78|*  5. <<< [Offset_Key_cmp] キーを比較する >>> 
  79|*【引数】
  80|*  ・void*  data1, data2;   キーを含むデータのアドレス
  81|*  ・int  返り値;           比較の結果、正=data1 が優先、負=data2 が優先
  82|*【補足】
  83|*・キーが int 型の場合、昇順なら、返り値は正です(data1.key < data2.key)。
  84|***************************************************************************/
  85|int  Offset_Key_cmp( Offset_Key* m, void* data1, void* data2 )
  86|{
  87|  int  flag;
  88|
  89|  switch ( m->type ) {
  90|    case Offset_Int:
  91|      flag = Offset_ref( m->offset, data1, int )
  92|           - Offset_ref( m->offset, data2, int );
  93|      break;
  94|    case Offset_Double:
  95|      flag = (int)( Offset_ref( m->offset, data1, double )
  96|                  - Offset_ref( m->offset, data2, double ) );
  97|      break;
  98|    default:
  99|      #ifdef _CHECKER
 100|        error();
 101|      #endif
 102|      break;
 103|  }
 104|
 105|  return  flag * m->direc;
 106|}
 107|
 108| 
 109|/**************************************************************************
 110|*  6. <<< [Offset_Key_print] デバッグ表示 >>> 
 111|*【引数】
 112|*  ・Offset_Key*  m;  キー(の型)
 113|*  ・char*  title;     行頭に表示する文字列
 114|***************************************************************************/
 115|#ifndef  ERRORS_CUT_DEBUG_TOOL
 116|#ifdef   USES_ARRX
 117|void  Offset_Key_print( Offset_Key* m, const char* title )
 118|{
 119|  static char*  type_str[] = {
 120|    "Offset_Int", "Offset_Double", "Offset_CString", "Offset_CStringP",
 121|    "Offset_CStringPI", "Offset_CStringPW", "Offset_StrV"
 122|  };
 123|  static char*  direc_str[] = {
 124|    "Offset_Up" /*-1*/, "Offset_NoDirec", "Offset_Down"
 125|  };
 126|
 127|  if ( m->type >= 0 && m->type < ArrX_C_getN( type_str, char* ) &&
 128|       m->direc >= -1 && m->direc <= 1 ) {
 129|    Errors_printf( "%sKey(%p): offset=%d(0x%X), type=%d(%s), direc=%d(%s)",
 130|      title, m, m->offset, m->offset,
 131|      m->type, type_str[m->type], m->direc, direc_str[m->direc+1] );
 132|  }
 133|  else {
 134|    Errors_printf( "%sKey(%p): offset=%d(0x%X), type=%d, direc=%d",
 135|      title, m, m->offset, m->offset,
 136|      m->type, m->direc );
 137|  }
 138|}
 139|#endif
 140|#endif
 141|
 142|
 143| 
 144|/**************************************************************************
 145|*  7. <<< [Offset_Key_printData] 対象データのキーの値のデバッグ表示 >>> 
 146|*【引数】
 147|*  ・Offset_Key*  m;  キー(の型)
 148|*  ・void*  data;      キーを含むデータの先頭アドレス
 149|*  ・char*  title;     行頭に表示する文字列
 150|***************************************************************************/
 151|#ifndef  ERRORS_CUT_DEBUG_TOOL
 152|void  Offset_Key_printData( Offset_Key* m, void* data, const char* title )
 153|{
 154|  switch ( m->type ) {
 155|    case Offset_Int:
 156|      Errors_printf( "%sData of Key (%p) = %d", title, data,
 157|        Offset_ref( m->offset, data, int ) );
 158|      break;
 159|    case Offset_Double:
 160|      Errors_printf( "%sData of Key (%p) = %f", title, data,
 161|        Offset_ref( m->offset, data, double ) );
 162|      break;
 163|    case Offset_CString:
 164|      Errors_printf( "%sData of Key (%p) = %s", title, data,
 165|        &Offset_ref( m->offset, data, char ) );
 166|      break;
 167|    case Offset_CStringP:
 168|    case Offset_CStringPI:
 169|    case Offset_CStringPW:
 170|      Errors_printf( "%sData of Key (%p) = %s", title, data,
 171|        Offset_ref( m->offset, data, char* ) );
 172|      break;
 173|    /* default was ignore */
 174|  }
 175|}
 176|#endif
 177|
 178|
 179| 
 180|#endif  /* USES_MORI_STDLIB */ 
 181|#endif  /* USES_STDLIBS */
 182|
 183| 
 184|