Selaa lähdekoodia

Removing exceptions

Panagiotis Christopoulos Charitos 11 vuotta sitten
vanhempi
sitoutus
6c2c6312cb
3 muutettua tiedostoa jossa 26 lisäystä ja 23 poistoa
  1. 8 0
      include/anki/scene/Common.h
  2. 17 16
      include/anki/scene/SceneObject.h
  3. 1 7
      src/scene/SceneObject.cpp

+ 8 - 0
include/anki/scene/Common.h

@@ -35,10 +35,18 @@ using SceneString = StringBase<SceneAllocator<char>>;
 template<typename T>
 using SceneVector = Vector<T, SceneAllocator<T>>;
 
+/// Scene vector
+template<typename T>
+using SceneDArray = DArray<T, SceneAllocator<T>>;
+
 /// The same as SceneVector. Different name to show the difference
 template<typename T>
 using SceneFrameVector = Vector<T, SceneFrameAllocator<T>>;
 
+/// The same as SceneVector. Different name to show the difference
+template<typename T>
+using SceneFrameDArray = DArray<T, SceneFrameAllocator<T>>;
+
 /// Scene dictionary
 template<typename T>
 using SceneDictionary = 

+ 17 - 16
include/anki/scene/SceneObject.h

@@ -36,25 +36,33 @@ struct SceneObjectCallbackCollection
 
 /// The base of all scene related objects
 class SceneObject: 
-	public Object<SceneObject, SceneAllocator<SceneObject>, 
+	private Object<SceneObject, SceneAllocator<SceneObject>, 
 	SceneObjectCallbackCollection>
 {
 public:
+	using Base = Object<SceneObject, SceneAllocator<SceneObject>,
+		SceneObjectCallbackCollection>;
+
 	enum class Type: U8
 	{
+		NONE = 0,
 		SCENE_NODE = 1 << 0,
 		EVENT = 1 << 1,
-		_TYPE_MASK = SCENE_NODE | EVENT
+		_TYPE_MASK = SCENE_NODE | EVENT,
+		_MARKED_FOR_DELETION = 1 << 2
 	};
 	ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(Type, friend)
 
-	using Base = Object<SceneObject, SceneAllocator<SceneObject>,
-		SceneObjectCallbackCollection>;
-
-	SceneObject(Type type, SceneObject* parent, SceneGraph* scene);
+	SceneObject(Type type, SceneGraph* scene);
 
 	virtual ~SceneObject();
 
+	// Methods that SceneObject can use from it's base.
+	using Base::getParent;
+	using Base::visitChildren;
+	using Base::visitThisAndChildren;
+	using Base::visitChildrenMaxDepth;
+
 	Type getType() const
 	{
 		return m_bits & Type::_TYPE_MASK;
@@ -81,7 +89,7 @@ public:
 
 	Bool isMarkedForDeletion() const
 	{
-		return (m_bits & Flag::MARKED_FOR_DELETION) != Flag::NONE;
+		return (m_bits & Type::_MARKED_FOR_DELETION) != Type::NONE;
 	}
 
 	void markForDeletion();
@@ -105,15 +113,8 @@ public:
 	}
 
 private:
-	enum class Flag: U8
-	{
-		NONE = 0,
-		MARKED_FOR_DELETION = 1 << 2
-	};
-	ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(Flag, friend)
-
-	SceneGraph* m_scene;
-	U8 m_bits; ///< Contains the type and the marked for deletion
+	SceneGraph* m_scene = 0;
+	Type m_bits = Type::NONE; ///< Contains the type and other flags
 };
 
 inline void SceneObjectCallbackCollection::onChildRemoved(

+ 1 - 7
src/scene/SceneObject.cpp

@@ -9,18 +9,12 @@
 namespace anki {
 
 //==============================================================================
-SceneObject::SceneObject(Type type, SceneObject* parent, SceneGraph* scene)
+SceneObject::SceneObject(Type type, SceneGraph* scene)
 :	Base(),
 	m_scene(scene),
 	m_bits(static_cast<U8>(type))
 {
 	ANKI_ASSERT(m_scene);
-
-	// TODO Remove that
-	if(parent)
-	{
-		parent->addChild(this);
-	}
 }
 
 //==============================================================================