Delete this, but first, repoint all the partners to point to replacement. If replacement is NULL, then partner relationships are removed.
| 954 | // replacement. If replacement is NULL, then partner relationships |
| 955 | // are removed. |
| 956 | void TabVector::Delete(TabVector* replacement) { |
| 957 | TabVector_C_IT it(&partners_); |
| 958 | for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) { |
| 959 | TabVector* partner = it.data(); |
| 960 | TabVector_C_IT p_it(&partner->partners_); |
| 961 | // If partner already has replacement in its list, then make |
| 962 | // replacement null, and just remove this TabVector when we find it. |
| 963 | TabVector* partner_replacement = replacement; |
| 964 | for (p_it.mark_cycle_pt(); !p_it.cycled_list(); p_it.forward()) { |
| 965 | TabVector* p_partner = p_it.data(); |
| 966 | if (p_partner == partner_replacement) { |
| 967 | partner_replacement = NULL; |
| 968 | break; |
| 969 | } |
| 970 | } |
| 971 | // Remove all references to this, and replace with replacement if not NULL. |
| 972 | for (p_it.mark_cycle_pt(); !p_it.cycled_list(); p_it.forward()) { |
| 973 | TabVector* p_partner = p_it.data(); |
| 974 | if (p_partner == this) { |
| 975 | p_it.extract(); |
| 976 | if (partner_replacement != NULL) |
| 977 | p_it.add_before_stay_put(partner_replacement); |
| 978 | } |
| 979 | } |
| 980 | if (partner_replacement != NULL) { |
| 981 | partner_replacement->AddPartner(partner); |
| 982 | } |
| 983 | } |
| 984 | delete this; |
| 985 | } |
| 986 | |
| 987 | |
| 988 | } // namespace tesseract. |
no test coverage detected