From 177898f93c50d72623ecd2c49fd8f7fbc8b63a28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 24 Jan 2013 15:15:06 +0100 Subject: [PATCH] SceneGraph: code cleanup, documentation, fixed assertions. The original assertion didn't actually check anything, because the list was always empty. Moved/copied it to relevant places. --- src/SceneGraph/Object.hpp | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/src/SceneGraph/Object.hpp b/src/SceneGraph/Object.hpp index f352d23b1..902ba3e83 100644 --- a/src/SceneGraph/Object.hpp +++ b/src/SceneGraph/Object.hpp @@ -144,20 +144,36 @@ template std::vector std::vector Object::transformations(std::vector*> objects, const typename Transformation::DataType& initialTransformation) const { + CORRADE_ASSERT(objects.size() < 0xFFFFu, "SceneGraph::Object::transformations(): too large scene", {}); + /* Remember object count for later */ std::size_t objectCount = objects.size(); /** @bug What if there is one objects twice in the list */ - /* Create initial list of joints from original objects */ - std::vector*> jointObjects(objects.size()); - for(std::size_t i = 0; i != jointObjects.size(); ++i) { - jointObjects[i] = static_cast*>(objects[i]); - CORRADE_INTERNAL_ASSERT(jointObjects[i]->counter == 0xFFFFu); - jointObjects[i]->counter = i; - jointObjects[i]->flags |= Flag::Joint; + /* Mark all original objects as joints and create initial list of joints + from them */ + for(std::size_t i = 0; i != objects.size(); ++i) { + CORRADE_INTERNAL_ASSERT(objects[i]->counter == 0xFFFFu); + objects[i]->counter = i; + objects[i]->flags |= Flag::Joint; } + std::vector*> jointObjects(objects); /* Scene object */ const Scene* scene = this->scene(); @@ -186,6 +202,8 @@ template std::vector Ob /* If not already marked as joint, mark it as such and add it to list of joint objects */ if(!(parent->flags & Flag::Joint)) { + CORRADE_ASSERT(jointObjects.size() < 0xFFFFu, + "SceneGraph::Object::transformations(): too large scene", {}); CORRADE_INTERNAL_ASSERT(parent->counter == 0xFFFFu); parent->counter = jointObjects.size(); parent->flags |= Flag::Joint; @@ -199,8 +217,6 @@ template std::vector Ob if(it == objects.end()) it = objects.begin(); } - CORRADE_ASSERT(objects.size() < 0xFFFFu, "SceneGraph::Object::transformations(): too large scene", {}); - /* Array of absolute transformations in joints */ std::vector jointTransformations(jointObjects.size());