[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [34359] trunk/blender/intern/memutil: These files are needed for booleans (which I had disabled)

Campbell Barton ideasman42 at gmail.com
Sun Jan 16 21:52:16 CET 2011


Revision: 34359
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=34359
Author:   campbellbarton
Date:     2011-01-16 20:52:15 +0000 (Sun, 16 Jan 2011)
Log Message:
-----------
These files are needed for booleans (which I had disabled)
 reverse merge:
svn merge . -r34357:34356

Revision Links:
--------------
    http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=34357

Modified Paths:
--------------
    trunk/blender/intern/memutil/CMakeLists.txt

Added Paths:
-----------
    trunk/blender/intern/memutil/MEM_NonCopyable.h
    trunk/blender/intern/memutil/MEM_RefCountPtr.h
    trunk/blender/intern/memutil/MEM_SmartPtr.h

Modified: trunk/blender/intern/memutil/CMakeLists.txt
===================================================================
--- trunk/blender/intern/memutil/CMakeLists.txt	2011-01-16 20:25:47 UTC (rev 34358)
+++ trunk/blender/intern/memutil/CMakeLists.txt	2011-01-16 20:52:15 UTC (rev 34359)
@@ -36,8 +36,11 @@
 	MEM_Allocator.h
 	MEM_CacheLimiter.h
 	MEM_CacheLimiterC-Api.h
+	MEM_NonCopyable.h
+	MEM_RefCountPtr.h
 	MEM_RefCounted.h
 	MEM_RefCountedC-Api.h
+	MEM_SmartPtr.h
 )
 
 blender_add_lib(bf_intern_memutil "${SRC}" "${INC}")

Copied: trunk/blender/intern/memutil/MEM_NonCopyable.h (from rev 34356, trunk/blender/intern/memutil/MEM_NonCopyable.h)
===================================================================
--- trunk/blender/intern/memutil/MEM_NonCopyable.h	                        (rev 0)
+++ trunk/blender/intern/memutil/MEM_NonCopyable.h	2011-01-16 20:52:15 UTC (rev 34359)
@@ -0,0 +1,58 @@
+/**
+ * $Id$
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+/**
+ * @file	MEM_NonCopyable.h
+ * Declaration of MEM_NonCopyable class.
+ */
+
+#ifndef NAN_INCLUDED_NonCopyable_h
+#define NAN_INCLUDED_NonCopyable_h
+
+/**
+ * Simple class that makes sure sub classes cannot
+ * generate standard copy constructors.
+ * If you want to make sure that your class does
+ * not have any of these cheesy hidden constructors
+ * inherit from this class.
+ */
+
+class MEM_NonCopyable {
+protected :
+
+	MEM_NonCopyable(
+	) {
+	};
+
+private :
+
+	MEM_NonCopyable (const MEM_NonCopyable *);
+	MEM_NonCopyable (const MEM_NonCopyable &);
+};
+
+#endif
+

Copied: trunk/blender/intern/memutil/MEM_RefCountPtr.h (from rev 34356, trunk/blender/intern/memutil/MEM_RefCountPtr.h)
===================================================================
--- trunk/blender/intern/memutil/MEM_RefCountPtr.h	                        (rev 0)
+++ trunk/blender/intern/memutil/MEM_RefCountPtr.h	2011-01-16 20:52:15 UTC (rev 34359)
@@ -0,0 +1,290 @@
+/**
+ * $Id$
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+/**
+ * @file	MEM_RefCountPtr.h
+ * Declaration of MEM_RefCounted and MEM_RefCountable classes.
+ * @author Laurence
+ */
+
+#ifndef NAN_INCLUDED_MEM_RefCountPtr_h
+#define NAN_INCLUDED_MEM_RefCountPtr_h
+
+#include <stdlib.h> // for NULL !
+
+/**
+ * @section MEM_RefCountable
+ * This is a base class for reference countable objects.
+ * If you want an object to be shared using a reference 
+ * counted system derrivce from this class. All subclasses
+ * should insist that they are created on the heap, this
+ * can be done by makeing all constructors private and 
+ * defining a static New() method that returns a ref counted
+ * ptr to a new()ly allocated instance. 
+ *
+ * @section Example subclass
+ *
+ *
+ * class MySharedObject : public MEM_RefCountable {
+ *
+ * private :
+ *	MySharedObject() : MEM_RefCountable() { //class specific initialization};
+ *  MySharedObject(const MySharedObject &other) // not implemented
+ * public :
+ *		static	
+ *			MEM_RefCountPtr<MySharedObject> 
+ *		New(
+ *		) {
+ *			return MEM_RefCountPtr<MySharedObject>( new MySharedObject());
+ *		}
+ *		
+ *		// other member functions
+ * };
+ *
+ * Alternitively you may first wish to define a fully functional
+ * class and then define a reference counting wrapper for this class.
+ * This is useful when the base type can be used without reference
+ * counting.
+ *
+ * E.g.
+ * class UsefullClass {
+ * private :
+ *  ...
+ * public :
+ *
+ *      UsefullClass()
+ *      UsefullMethod(...)
+ *      AnotherUsefullMethod(...)
+ * };
+ *
+ * class RcUsefullClass : public UsefullClass, public MEM_RefCountable
+ * {
+ * private :
+ *      // Override base class public constructor --- forces
+ *      // use of New(...)
+ *      RcUsefullClass(...)
+ * public :
+ *
+ *  // Override each public constructor of UsefullClass with
+ *  // an equivalent static New method returning a MEM_RefCountPtr
+ *
+ *  static
+ *      MEM_RefCountPtr<RcUsefullClass>
+ *  New(...){
+ *       return MEM_RefCountPtr<RcUsefullClass> output(
+ *           new UsefullClass(...)
+ *       );
+ *   }
+ *
+ *  // warning never call destructor directly allow ref counting
+ *  // mechanism to handle object lifetime.
+ *  ~RcUsefullClass();
+ * };
+ *
+ *
+ */
+
+class MEM_RefCountable {
+private :
+
+	/**
+	 * The reference count!
+	 * We use mutable here because we would like to
+	 * share references of const objects!
+	 * Maybe should think about having decRef()
+	 * another value because we should not be deleting
+	 * non-const objects
+	 */
+
+	mutable int m_count;
+
+protected :
+
+	/**
+	 * Protected constructors
+	 * This class is not for direct instanciation. Sub classes
+	 * should only be allocated on the heap.
+	 */
+
+	MEM_RefCountable (
+	) :
+		m_count (0)
+	{
+	};
+
+	MEM_RefCountable (
+		const MEM_RefCountable &
+	) :
+		m_count (0)
+	{
+	}
+
+public :
+
+		void
+	IncRef(
+	) const {
+		m_count++;
+	}
+
+		int
+	DecRef(
+	) {
+		return (--m_count);
+	}
+
+	~MEM_RefCountable(
+	) {
+		//nothing to do
+	}
+};
+
+/**
+ * @section MEM_RefCountPtr
+ */
+
+template
+	< class T >
+class MEM_RefCountPtr {
+
+public :
+
+	/**
+	 * Construction from reference - share ownership with
+	 * the right hand side.
+	 */
+
+	MEM_RefCountPtr(
+		const MEM_RefCountPtr &rhs
+	) : m_val (NULL) {
+		ShareOwnership(rhs.m_val);
+	}
+
+	/**
+	 * Construction from ptr - this class shares
+	 * ownership of object val.
+	 */
+
+	MEM_RefCountPtr(
+		const T* val
+	) :
+		m_val (NULL)
+	{
+		ShareOwnership(val);
+	}
+
+	/**
+	 * Default constructor
+	 */
+
+	MEM_RefCountPtr(
+	) :
+		m_val (NULL)
+	{
+	}
+
+	/**
+	 * Type conversion from this class to the type
+	 * of a pointer to the template parameter.
+	 * This means you can pass an instance of this class
+	 * to a function expecting a ptr of type T.
+	 */
+
+	operator T * () const {
+		return m_val;
+	}
+
+
+	MEM_RefCountPtr & operator=(
+		const MEM_RefCountPtr &rhs
+	) {
+		if (this->m_val != rhs.m_val) {
+			ReleaseOwnership();
+			ShareOwnership(rhs.m_val);
+		}
+		return *this;
+	}
+
+	/**
+	 * Overload the operator -> so that it's possible to access
+	 * all the normal methods of the internal ptr.
+	 */
+
+	T * operator->() const {
+		return m_val;
+	}
+
+	/**
+	 * Returrn a reference to the shared object.
+	 */
+
+		T&
+	Ref(
+	) {
+		return *m_val;
+	}
+
+
+	/**
+	 * Destructor - deletes object if it's ref count is zero.
+	 */
+
+	~MEM_RefCountPtr(
+	) {
+		ReleaseOwnership();
+	}
+
+private :
+	
+	/// The ptr owned by this class.
+	T * m_val;
+
+		void
+	ShareOwnership(
+		const T * val
+	) {
+		if (val != NULL) {
+			val->IncRef();
+		}
+		m_val = const_cast<T *>(val);
+	}
+		
+		void
+	ReleaseOwnership(
+	) {
+		if (m_val) {
+			if (m_val->DecRef() == 0) {
+				delete(m_val);
+				m_val = NULL;
+			}
+		}
+	}
+
+};
+
+#endif
+

Copied: trunk/blender/intern/memutil/MEM_SmartPtr.h (from rev 34356, trunk/blender/intern/memutil/MEM_SmartPtr.h)
===================================================================
--- trunk/blender/intern/memutil/MEM_SmartPtr.h	                        (rev 0)
+++ trunk/blender/intern/memutil/MEM_SmartPtr.h	2011-01-16 20:52:15 UTC (rev 34359)
@@ -0,0 +1,237 @@
+/**
+ * $Id$
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): none yet.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+/**
+ * @file	MEM_SmartPtr.h
+ * Declaration of MEM_RefCounted and MEM_RefCountable classes.
+ * @author Laurence
+ */
+
+#ifndef NAN_INCLUDED_MEM_SmartPtr_h
+#define NAN_INCLUDED_MEM_SmartPtr_h
+
+
+#include <stdlib.h> // for NULL !
+
+
+/**
+ * @section MEM_SmartPtr 
+ * This class defines a smart pointer similar to that defined in 
+ * the Standard Template Library but without the painful get()
+ * semantics to access the internal c style pointer.
+ *
+ * It is often useful to explicitely decalre ownership of memory

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list