/usr/lib/bouml/xmi2/141442.bodies is in bouml-plugouts-src 4.21-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | class UmlMergeActivityNode
!!!208642.cpp!!! sKind() : str
return "MergeNode";
!!!285955.cpp!!! solve_output_flows() : void
// input and outputs flows must be control/data
ControlOrData k = Unset;
// look at output flows
const QVector<UmlItem> ch = children();
unsigned n = ch.size();
unsigned i;
for (i = 0; i != n; i += 1) {
UmlFlow * f = dynamic_cast<UmlFlow *>(ch[i]);
if ((f != 0) && ((k = f->control_or_data()) != Unset))
break;
}
if (k == Unset) {
bool already = FALSE;
for (;;) {
// look at input flows
bool hasdata = FALSE;
bool hascontrol = FALSE;
bool hasunset = FALSE;
QListIterator<UmlFlow> it(_incoming_flows);
while (it.current() != 0) {
k = it.current()->control_or_data();
if (k == IsControl) {
hascontrol = TRUE;
break;
}
else if (k == IsData) {
hasdata = TRUE;
break;
}
else
hasunset = TRUE;
++it;
}
if (hascontrol || hasdata)
break;
else if (already || !hasunset) {
// not possible to know, force control
k = IsControl;
break;
}
already = TRUE;
// solve input flows
it.toFirst();
while (it.current() != 0) {
((UmlActivityNode *) it.current()->parent())->solve_output_flows();
++it;
}
}
}
// propagate
for (i = 0; i != n; i += 1) {
UmlFlow * f = dynamic_cast<UmlFlow *>(ch[i]);
if ((f != 0) && (f->control_or_data() == Unset))
f->set_control_or_data(k);
}
QListIterator<UmlFlow> it(_incoming_flows);
while (it.current() != 0) {
if (it.current()->control_or_data() == Unset)
it.current()->set_control_or_data(k);
++it;
}
|