Home | History | Annotate | Download | only in lib

Lines Matching refs:class_id

99   // Add element_id to class_id. The Add method is used to initialize
102 void Add(T element_id, T class_id) {
105 if (classes_[class_id])
106 classes_[class_id]->prev = element;
107 element->next = classes_[class_id];
109 classes_[class_id] = element;
111 class_index_[element_id] = class_id;
112 class_size_[class_id]++;
115 // Move and element_id to class_id. Disconnects (removes) element
117 void Move(T element_id, T class_id) {
125 Add(element_id, class_id);
131 T class_id = class_index_[element_id];
132 if (class_size_[class_id] == 1) return;
135 if (split_size_[class_id] == 0)
136 visited_classes_.push_back(class_id);
139 split_size_[class_id]++;
142 if (class_split_[class_id] == 0)
143 class_split_[class_id] = classes_[class_id];
144 if (class_split_[class_id] == elements_[element_id])
145 class_split_[class_id] = elements_[element_id]->next;
148 Move(element_id, class_id);
151 // Finalize class_id, split if required, and update class_splits,
154 T SplitRefine(T class_id) {
156 if (class_size_[class_id] == split_size_[class_id]) {
157 class_split_[class_id] = 0;
158 split_size_[class_id] = 0;
163 size_t remainder = class_size_[class_id] - split_size_[class_id];
164 if (remainder < (size_t)split_size_[class_id]) { // add smaller
165 Element* split_el = class_split_[class_id];
167 class_size_[class_id] = split_size_[class_id];
172 Element* split_el = class_split_[class_id];
173 classes_[new_class] = classes_[class_id];
174 class_size_[class_id] = remainder;
175 class_size_[new_class] = split_size_[class_id];
178 classes_[class_id] = split_el;
185 class_split_[class_id] = 0;
186 split_size_[class_id] = 0;
207 const T class_id(T element_id) const {
215 size_t class_size(T class_id) const {
216 return class_size_[class_id];
255 PartitionIterator(const Partition<T>& partition, T class_id)
257 element_(p_.classes_[class_id]),
258 class_id_(class_id) {}