프로그래밍/C,C++

[Paramics] 사용자 정의 데이터(USER_DATA) 사용하기

채윤아빠 2011. 12. 7. 22:31
728x90
반응형
파라믹스에서 미리 정의된 구조체들이 다음과 같이 있습니다.

NODE, LINK, ZONE, VEHICLE, BUSSTOP, DETECTOR, CARPARK, BEACON, LOOP, SLIP, RAMP

위 구조체들은 내부 필드들도 공개되어 있지 않아서, qpg_xxx 함수를 이용하여 원하는 값들을 얻어야 하는 불편함이 있습니다. 그래서 파라믹스에서는 기본 제공 구조체에 개발자가 원하는 데이터를 추가하는 방법을 제공하고 있습니다.

사용자 데이터 얻기 : XXX_USERDATA *qpg_XXX_userdata(XXX *pointer);
사용자 데이터 할당 : void qps_XXX_userdata(XXX *pointer, XXX_USERDATA *userdata);

Vehicle을 예를 들면, VEHICLE 구조체를 확장한 사용자 정의 구조체를 VHC_USERDATA를 사용하게 됩니다.

Vehicle 사용자 데이터 얻기 : VHC_USERDATA *qpg_VHC_userdata(VEHICLE *pointer);
Vehicle 사용자 데이터 할당 : void qps_VHC_userdata(VEHICLE *pointer, VHC_USERDATA *userdata);

여기서 의문은 VHC_USERDATA 는 어떻게 정의해야 하는 것인가이죠...
의외로 이 부분은 단순합니다. 파라믹스의 api_typedefs.h에서 아래와 같이 미리 정의되어 있습니다.

typedef struct NET_USERDATA_s NET_USERDATA;
typedef struct NDE_USERDATA_s NDE_USERDATA;
typedef struct LNK_USERDATA_s LNK_USERDATA;
typedef struct ZNE_USERDATA_s ZNE_USERDATA;
typedef struct VHC_USERDATA_s VHC_USERDATA;
typedef struct DTC_USERDATA_s DTC_USERDATA;
typedef struct DTL_USERDATA_s DTL_USERDATA;
typedef struct BCN_USERDATA_s BCN_USERDATA;
typedef struct BST_USERDATA_s BST_USERDATA;
typedef struct BSR_USERDATA_s BSR_USERDATA;
typedef struct CPK_USERDATA_s CPK_USERDATA;
typedef struct RMP_USERDATA_s RMP_USERDATA;
typedef struct SLP_USERDATA_s SLP_USERDATA;

개발자는 VHC_USERDATA_s 를 정의하고, 이 포인터를 넘겨주면 됩니다. 예를 들면, 다음과 같습니다.

// Vehicle user data structure
typedef struct VHC_USERDATA_s
{
 int VHCID;
 Bool equipped; // Bool = int, yes: 1, no: 0
 float ReleaseTime;
 float EntryTime;
 float AccumulatedTime;
 int ChoiceRoute;
 struct VHC_INCDB_s *incdb;
} VHC_USERDATA;

특정 Vehicle에 사용자 데이터를 할당하려면 다음과 같이 하면 되겠습니다.

VHC_USERDATA *pVHCUserData;

pVHCUserData = calloc(1, sizeof(VHC_USERDATA) );
qpg_VHC_userdata(vehicle, pVHCUserData);

특정 Vehicle에 할당되어 있는 사용자 데이터를 얻으려면 다음과 같이 하면 되겠습니다.

VHC_USERDATA *pVHCUserData;

pVHCUserData = qpg_VHC_userdata(vehicle);