Exemplo n.º 1
0
void BaseGameObject::remove_child(BaseGameObject *b)
{
	int index = get_child_index(b);
	if (index != -1) {
		children.erase(children.begin() + index);
	}
}
Exemplo n.º 2
0
	static void _sift_down(const RandomAccessIterator &first,
		const LessComparer &less_comparer,
		const size_t heap_size, size_t hole_index,
		const typename std::iterator_traits<RandomAccessIterator>::value_type
		&item)
	{
		assert(heap_size > 0);
		assert(hole_index < heap_size);

		const size_t root_index = hole_index;
		const size_t last_full_index = heap_size - (heap_size - 1) % Fanout;
		while (true) {
			const size_t child_index = get_child_index(hole_index);
			if (child_index >= last_full_index) {
				if (child_index < heap_size) {
					assert(child_index == last_full_index);
					hole_index = _move_up_max_child(first, less_comparer,
						heap_size - child_index, hole_index, child_index);
				}
				break;
			}
			assert(heap_size - child_index >= Fanout);
			hole_index = _move_up_max_child(first, less_comparer, Fanout,
				hole_index, child_index);
		}
		_sift_up(first, less_comparer, root_index, hole_index, item);
	}
Exemplo n.º 3
0
	static size_t _move_up_max_child(const RandomAccessIterator &first,
		const LessComparer &less_comparer, const size_t children_count,
		const size_t hole_index, const size_t child_index)
	{
		assert(children_count > 0);
		assert(children_count <= Fanout);
		assert(child_index == get_child_index(hole_index));

		size_t max_child_index = child_index;
		for (size_t i = 1; i < children_count; ++i) {
			if (!less_comparer(first[child_index + i], first[max_child_index])) {
				max_child_index = child_index + i;
			}
		}
		_move(first[hole_index], first[max_child_index]);
		return max_child_index;
	}
Exemplo n.º 4
0
void BaseGameObject::add_child(BaseGameObject *b)
{
	if (get_child_index(b) == -1) {
		children.insert(children.end(), b);
	}
}