138 {
139
140 if (last == nullptr || comparator(&last->data, &new_data) < 0) {
141 auto *new_element = new CLIST_LINK;
142 new_element->data = new_data;
143 if (last == nullptr) {
144 new_element->next = new_element;
145 } else {
146 new_element->next = last->next;
147 last->next = new_element;
148 }
149 last = new_element;
150 return true;
151 } else if (!unique || last->data != new_data) {
152
154 for (it.mark_cycle_pt(); !it.cycled_list(); it.forward()) {
155 void *data = it.data();
156 if (data == new_data && unique) {
157 return false;
158 }
159 if (comparator(&data, &new_data) > 0) {
160 break;
161 }
162 }
163 if (it.cycled_list()) {
164 it.add_to_end(new_data);
165 } else {
166 it.add_before_then_move(new_data);
167 }
168 return true;
169 }
170 return false;
171}
friend class CLIST_ITERATOR