2014-10-15 2 views
2

특정 시간대에 특정 데이터를 (모듈 B)로 보내도록 구성 (모듈 A)하고 싶습니다.모듈 데이터 전송 구성

(모듈 B)은 초기화 중에 이러한 구성을 (모듈 A)에 보내야합니다.

데이터이다

struct _data 
{ 
    int temp; 
    int velocity; 
    int time; 
} 

예를 들어, (모듈 A)는 세 번째 슬롯에서, 제 2 슬롯에서, 첫 번째 슬롯에서 다음 '시간'다음 '임시 & 속도'온도 '를 보내야 .... 등

내가 "구성 플래그를"만드는 만들기에 대해 생각하고 구조 :

struct _configuration 
{ 
    int temp_flag; 
    int time_flag; 
    int velocity_flag; 
} 
,

다음이 구조체의 배열 만들기 :

struct _configuration arr[NUMBER_OF_SLOTS]; 

을하고이 배열 사용하여 구성합니다

arr[0].temp_flag = 1; 
arr[0].velocity_flag = 0; 
arr[0].time_flag = 0; 

arr[1].temp_flag = 1; 
arr[1].velocity_flag = 1; 
arr[1].time_flag = 0; 

arr[2].temp_flag = 0; 
arr[2].velocity_flag = 0; 
arr[2].time_flag = 1; 

.... etc 

을하지만이 방법에 매우 행복하지 않다 ... 사람이있다 않는 더 나은 방법이나 알고리즘이 작업을 수행 할 수 있습니까? 사전에

많은 감사 많은 가능한 솔루션

답변

0

하나는 bitmasks (컴퓨터 그래픽에서 매우 인기가)입니다. 알다시피, 모든 숫자는 0과 1의 순서로 표현 될 수 있으므로, 의미있는 플래그가 될 수 있습니다. 우리가 비트 연산을하므로 이런 식으로 사용하는 것이 매우 간단합니다. 그리고 몇 가지 구성 구조를 만들 필요가 없습니다.

const int USE_TEMP =  1 << 0; // 01 
const int USE_VELOCITY = 1 << 1; // 010 
const int USE_TIME =  1 << 2; // 0100 
// ... 
// you have 32 free-to-use bits 
const int USE_ALL = 0111; // just for fun 

struct _data { 
    int temp; 
    int velocity; 
    int time; 
} 

그리고 그것은

int arr[NUMBER_OF_SLOTS]; 

arr[0] = USE_TEMP; 
arr[1] = USE_TEMP | USE_VELOCITY; 
arr[2] = USE_TIME; 

더 나은 보이는 우리를하지 않습니다 가져?

확인 값

당신이 매개 변수 중 일부는 구성에 포함 여부를 확인해야합니다, 그것은

if(arr[i] & USE_TEMP) { 
    // do smth with temp, it's included 
} 

또는이 방법

int expected_flags = USE_TIME | USE_VELOCITY; 
if(arr[i] & expected_flags == expected_flags) { 
    // time and velocity enabled 
} 

또는 특별 선언 매우 간단합니다 함수 또는 무서운 매크로를 사용하여 일부 매개 변수가 사용자의 구성에 있는지 확인하십시오.

,
bool check(int config, int flags) { 
    return config & flags == flags; 
} 

변경 구성

삭제해야하는 경우/매개 변수를 추가 무엇

?

int some_conf = USE_TEMP | USE_VELOCITY; 

간단한 방법

// delete 
if(check(some_conf, USE_VELOCITY)) 
    some_conf -= USE_VELOCITY; // <--- dangerous without if() 
// add  
if(!check(some_conf, USE_TIME)) 
    some_conf += USE_TIME; // <--- dangerous without if() 

안전 방법은

// delete 
some_conf &= ~USE_VELOCITY; 
// add 
some_conf |= USE_TIME; 
+0

그것은 더 나은 참 :) 이 대답하고 명확한 설명 주셔서 감사입니다 :) –