프로그래밍 2014. 3. 9. 17:43
728x90

매우 심플한 class 입니다,

 

이것의 용도는 class 멤버 변수들을 따로 스트링화(문자열) 하여 저장해 두기 위함입니다.

(C++ UIProperty_String - 01 장을 참고하세요. )

 

#define CLASS_UI_PROPERTY
#define MAX_UI_PROPERTY  100
#define MAX_VAL    999999999

 

CLASS_UI_PROPERTY class UIProperty_String
{
protected:
 UIProperty_String()
 {
  Class_Init();
 }
 void Class_Init()
 {
  m_iProperyCount = 0;
 }

protected:
 int m_iProperyCount;

public:
 virtual const bool UIProperty_Set()
 {
  //CLASS_UI_PROPERTY_SET
  return false;
 }
 virtual const bool UIProperty_Get()
 {
  //CLASS_UI_PROPERTY_GET
  return false;
 }

public:
 char _mpszVal[MAX_UI_PROPERTY][50];
 char _mpszName[MAX_UI_PROPERTY][50];

 const int GetPropertyCount() { return m_iProperyCount; }

 //등록
 void Set_Register( const char* _pszName, const float _fVal )
 {
  if( m_iProperyCount >= MAX_UI_PROPERTY)
  {
   Sys_Error( "MAX_UI_PROPERTY over!! (%d)", m_iProperyCount );
   return;
  }

  strcpy_s( _mpszName[m_iProperyCount], _pszName );
  _ltoa_s((long)_fVal, _mpszVal[m_iProperyCount], 10);
  m_iProperyCount++;
 }
 
 //값 넣을때
 void Set_Value( const char* _pszName, const char* _pszVal )
 {
  for( int i=0; i<m_iProperyCount; i++ )
  {
   if( strcmp( _mpszName[i], _pszName ) == 0 )
   {
    strcpy_s( _mpszVal[i], _pszVal );
    break;
   }
  }
 }

 //return - float
 const float GetVal( const char* _pszName )
 {
  for( int i=0; i<m_iProperyCount; i++ )
  {
   if( strcmp( _mpszName[i], _pszName ) == 0 )
   {
    float fVal = (float)atof( _mpszVal[i] );
    return fVal;
   }
  }

  return MAX_VAL+1; //none value
 }

};

 

 

#define CLASS_UI_PROPERTY_SET(a)  Set_Register(#a, a);
#define CLASS_UI_PROPERTY_GET(a)  a = GetVal(#a);

 

 

CLASS_UI_PROPERTY_SET(Diffuse.A)
CLASS_UI_PROPERTY_SET(Diffuse.R)
CLASS_UI_PROPERTY_SET(Diffuse.G)
CLASS_UI_PROPERTY_SET(Diffuse.B)

 

이런식으로 멤버변수를 모두 스트링화 시켜서 저장해 둘 수 있습니다.

UIProperty_String 내부에서는 문자열 비교와 문자열<->값 변환 의 간단한 연산만이

사용되어 집니다.

GetVal( const char* _pszName ) 로 멤버변수의 값을 가져올 수 있습니다.

지금은 float type 하나만을 사용합니다만,

필요에 따라, type 역시 저장해 두고 사용할 수도 있겠지요.

 

 

728x90

'프로그래밍' 카테고리의 다른 글

HDR LDR Bloom  (0) 2014.03.23
쉐이더 홈피 하나 추천!  (0) 2014.03.19
C++ UIProperty_String - 01  (0) 2014.03.09
depth buffer shadow - 깊이 버퍼 그림자 (7)  (2) 2014.01.13
depth buffer shadow - 깊이 버퍼 그림자 (6)  (0) 2014.01.13
posted by BK dddDang
: