# Branch Monitor #
Here is an example monitor that can be written in `Whamm`, it does not require an instrumentation library.
Rather, it uses the DSL to express all of its monitoring logic.
```
// Matches _if and br_if events
wasm::*if:before {
report unshared var taken: i32;
report unshared var total: i32;
// which branch was taken?
var was_taken: bool = arg0 != 0;
taken = taken + (was_taken as i32);
total++;
}
wasm::br_table:before {
report unshared var taken_branches: map<u32, u32>;
// which branch was taken?
// default branch is at 'num_targets' in the map
var index: u32 = arg0 <= (num_targets - 1) ? arg0 : num_targets;
// count stores an array of counters
taken_branches[index]++;
}
wasm::select(arg0: i32):before {
report unshared var selected_first: u32;
report unshared var total: u32;
// which branch was taken?
var was_taken: bool = arg0 != 0;
selected_first = selected_first + (was_taken as u32);
total++;
}
```