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); }