-
- void diff_single_numbers(self *LExclude, self *Intersection, self *RExclude,
- const self& RHS) {
-
- CaseItemConstIt L = Items.begin(), R = RHS.Items.begin();
- CaseItemConstIt el = Items.end(), er = RHS.Items.end();
- while (L != el && R != er) {
- const Cluster &LCluster = *L;
- const RangeEx &LRange = LCluster.first;
- const Cluster &RCluster = *R;
- const RangeEx &RRange = RCluster.first;
-
- if (LRange.getLow() < RRange.getLow()) {
- if (LExclude)
- LExclude->add(LRange.getLow(), LCluster.second);
- ++L;
- } else if (LRange.getLow() > RRange.getLow()) {
- if (RExclude)
- RExclude->add(RRange.getLow(), RCluster.second);
- ++R;
- } else {
- if (Intersection)
- Intersection->add(LRange.getLow(), LCluster.second);
- ++L;
- ++R;
- }
- }
-
- if (L != Items.end()) {
- if (LExclude)
- do {
- LExclude->add(L->first, L->second);
- ++L;
- } while (L != Items.end());
- } else if (R != RHS.Items.end()) {
- if (RExclude)
- do {
- RExclude->add(R->first, R->second);
- ++R;
- } while (R != RHS.Items.end());
- }
- }