| NORSYS SOFTWARE © 2012 | NETICA API | C   VERSION   5.04  |
| void MapStateList_bn ( | const state_bn* src_states, const nodelist_bn* src_nodes, state_bn* dest_states, const nodelist_bn* dest_nodes ) |
Puts into the dest_states array the same states that are in the src_states array, except in a different order.
The order of src_states is given by src_nodes, and the order of dest_states will be given by dest_nodes.
src_nodes may not contain duplicates, but dest_nodes may (the state values will be duplicated accordingly). Any src_states entries for nodes in src_nodes which don't appear in dest_nodes will be ignored. If there are nodes in dest_nodes that don't appear in src_nodes, then EVERY_STATE will be placed in the corresponding position of dest_states.
The idea is that each entry of src_states contains a value of the corresponding node in src_nodes, and now we want these values in the order given by dest_nodes.
Version:
See also:
| SetNodeProbs_bn | Requires a list of states in the correct order | |
| GetNodeFuncState_bn | Also requires correctly ordered states | |
| GetNodeParents_bn | For the above, the list of states must in parent order | |
| GetNodeFinding_bn | Determine the current state finding of a node | |
| NewCaseset_cs | For sets of node-value pairs | |
| ReorderNodeStates_bn | For the states within a single node |
Example:
// MapStateList_bn is equivalent to the below function, but it is much faster
// and it doesn't use the user-data pointers.
void MapStateList (const state_bn* src_states, const nodelist_bn* src_nodes,
state_bn* dest_states, const nodelist_bn* dest_nodes){
int i, num_src = LengthNodeList_bn (src_nodes);
int num_dest = LengthNodeList_bn (dest_nodes);
state_bn every = EVERY_STATE;
for (i = 0; i < num_dest; i++)
SetNodeUserData_bn (NthNode_bn (dest_nodes, i), 0, (void*) every);
for (i = 0; i < num_src; i++)
SetNodeUserData_bn (NthNode_bn (src_nodes, i), 0, (void*) src_states[i]);
for (i = 0; i < num_dest; i++)
dest_states[i] = * (state_bn*) GetNodeUserData_bn (NthNode_bn (dest_nodes, i), 0);
}