32 current_member->to_area_manager()
33 ->get_multi_species_manager()
34 ->search_target_species(location, prop, found_member, return_level);
65 while (current_member &&
73 current_member->to_group_manager()->search_target_species(location, prop, found_member, return_level);
81 *found_member = current_member;
82 current_member->to_multi_species_manager()->search_target_species(location, prop, found_member, return_level);
84 else if ((current_member->
is_spacer_terminal()) && (current_index + 1 == no_of_members)) {
86 *found_member = current_member->
get_parent(LEV_MULTI_SPECIES);
87 if ((*found_member) && !((*found_member)->parent->is_area_manager())) {
92 *found_member = current_member->
get_parent(LEV_MULTI_SPECIES);
98 current_member->to_multi_species_manager()->search_target_species(location, prop, found_member, return_level);
100 else if ((current_member->
is_spacer_terminal()) && (current_index + 1 == no_of_members)) {
101 *found_member = current_member->
get_parent(LEV_MULTI_SPECIES);
102 if ((*found_member) && !((*found_member)->parent->is_area_manager())) {
103 *found_member = (*found_member)->
parent;
108 *found_member = current_member;
117 if (current_member) {
119 while (current_member && current_member->
flag.
hidden && current_index!=no_of_members) {
124 if (current_index != old_index) {
125 if (current_member &&
138 if (current_member) {
140 current_member->to_area_manager()
141 ->get_multi_species_manager()
142 ->search_target_species(location, prop, found_member, return_level);
154 void ED4_container::correct_insert_position(
ED4_index& index) {
159 member(index-1)->is_spacer_terminal() &&
160 !
owner()->is_device_manager())
166 void ED4_container::resize(
ED4_index needed_size) {
167 if (needed_size>size_of_list) {
169 ED4_index new_size = (needed_size*3)/2+2;
171 size_of_list = new_size;
185 else if (index != no_of_members) {
189 correct_insert_position(index);
190 shift_list(index, 1);
193 memberList[index] = new_member;
195 new_member->
index = index;
205 correct_insert_position(index);
206 shift_list(index, 1);
209 memberList[index] = new_member;
211 new_member->
index = index;
218 if (!member_to_del || (no_of_members <= 0)) {
225 shift_list(index+1, -1);
244 long needed_size = no_of_members +
length;
249 for (
ED4_index n = needed_size-1; n > start_index; n--) {
255 memberList[n] = memberList[o];
257 memberList[n]->
index = n;
259 memberList[o] =
NULp;
265 for (
ED4_index n = start_index + length; n < (no_of_members +
length); n++) {
271 memberList[n] = memberList[o];
273 memberList[n]->
index = n;
275 memberList[o] =
NULp;
282 if (old_pos>=0 && old_pos<no_of_members && new_pos>=0 && new_pos<no_of_members) {
283 if (new_pos!=old_pos) {
284 ED4_base *moved_member = memberList[old_pos];
286 shift_list(old_pos+1, -1);
287 shift_list(new_pos, 1);
289 memberList[new_pos] = moved_member;
290 moved_member->
index = new_pos;
319 current_member = memberList[0];
320 if (! current_member) {
325 while (current_member) {
327 return current_index;
330 current_member = memberList[current_index];
333 return no_of_members;
336 #ifdef ASSERTION_USED
339 for (
int m=0; m<no_of_members; m++) {
342 if (base->
index!=m) {
343 printf(
"Member %i has illegal index %li\n", m, base->
index);
350 #endif // ASSERTION_USED
void insert_member(ED4_base *new_member)
ED4_base * member(ED4_index i) const
ED4_properties static_prop
int is_species_manager() const
int is_multi_species_manager() const
bool is_consensus_manager() const
void append_member(ED4_base *new_member)
ED4_index members() const
ED4_returncode move_member(ED4_index old_pos, ED4_index new_pos)
static void error(const char *msg)
void ARB_recalloc(TYPE *&tgt, size_t oelem, size_t nelem)
bool valid_index(ED4_index idx) const
void calc_world_coords(AW_pos *x, AW_pos *y) const
TYPE * ARB_calloc(size_t nelem)
ED4_returncode remove_member(ED4_base *member)
bool existing_index(ED4_index idx) const
int is_area_manager() const
ED4_index search_member(ED4_extension *location, ED4_properties prop)
ED4_returncode search_target_species(ED4_extension *location, ED4_properties prop, ED4_base **found_member, ED4_level return_level)
void announce_added(ED4_level child_level) const
int is_spacer_terminal() const
ED4_manager * get_parent(ED4_level lev) const
int is_group_manager() const
int is_root_group_manager() const