Sto lavorando su un componente in cui inserisco dati e ottengo dati diversi come risultato. L'input è sempre lo stesso (3 oggetti). Da questi 3 oggetti è possibile calcolare fino a 9 altri oggetti. Viene eseguito un calcolo per ciascun oggetto di output. Prima di calcolare i dati di uscita, voglio impostare quale dei 9 oggetti deve essere calcolato.
- Imposta i dati di input
- Imposta quali dati di output devono essere calcolati
- Ottieni dati di output
Sto lavorando in Visual C ++ (C99). Al momento sto affrontando un po 'un problema di progettazione qui. Dopo aver impostato i dati di input, sto usando una maschera di bit per configurare quali dati di output dovrebbero essere calcolati.
const int foo1 = 1; //000000001
const int foo2 = 2; //000000010
const int foo3 = 4; //000000100
const int foo4 = 8; //000001000
const int foo5 = 16; //000010000
const int foo6 = 32; //000100000
const int foo7 = 64; //001000000
const int foo8 = 128; //010000000
const int foo9 = 256; //100000000
SetOutput(foo2 | foo4 | foo5 );
I dati sono contenuti in un array ARRAY[9]
. Per quelli che sono stati impostati (foo2, foo4 e foo5) gli elementi contengono dati validi dopo il calcolo ( ARRAY[2]
, ARRAY[4]
, ARRAY[5]
)
Quindi voglio ottenere i dati risultanti.
GetData(foo2);
GetData(foo4);
GetData(foo5);
Il mio problema è come ottengo l'indice dell'elemento dai valori della maschera foo2 = 2
, foo4 = 8
o per esempio foo5 = 16
?
L'unica possibilità sarebbe prendere log2(n)
e ottenere 2
, 3
e 4
, che sarebbero gli indici degli elementi corretti di ARRAY
.
C'è un modo più semplice di questo? Ho pensato invece di usare una mappa, con il valore della maschera (1,2,4,8 ... 256) come campo chiave e i dati calcolati nel campo del valore. Ma preferirei mantenere la matrice statica. Grazie in anticipo!