From e5791cf48e10ec1336f463b7fccff6b302621eb9 Mon Sep 17 00:00:00 2001 From: Tamito Kajiyama Date: Fri, 28 Dec 2012 20:21:05 +0000 Subject: Another mega (literally :p) code clean-up patch by Bastien Montagne, thanks again! --- .../freestyle/intern/system/PointerSequence.h | 161 ++++++++++----------- 1 file changed, 80 insertions(+), 81 deletions(-) (limited to 'source/blender/freestyle/intern/system/PointerSequence.h') diff --git a/source/blender/freestyle/intern/system/PointerSequence.h b/source/blender/freestyle/intern/system/PointerSequence.h index 72c6aa458fd..c97f4516d00 100644 --- a/source/blender/freestyle/intern/system/PointerSequence.h +++ b/source/blender/freestyle/intern/system/PointerSequence.h @@ -1,97 +1,96 @@ -// -// Filename : PointerSequence.h -// Author(s) : Alexander Beels -// Purpose : Class to define a cell grid surrounding -// the projected image of a scene -// Date of creation : 22/11/2010 -// -/////////////////////////////////////////////////////////////////////////////// +/* + * ***** 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) 2010 Blender Foundation. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL LICENSE BLOCK ***** + */ +#ifndef __FREESTYLE_POINTER_SEQUENCE_H__ +#define __FREESTYLE_POINTER_SEQUENCE_H__ -// -// Copyright (C) : Please refer to the COPYRIGHT file distributed -// with this source distribution. -// -// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// -/////////////////////////////////////////////////////////////////////////////// - -// -// Simple RAII wrappers for std:: sequential containers -// -/////////////////////////////////////////////////////////////////////////////// - -// -// PointerSequence -// -// Produces a wrapped version of a sequence type (std::vector, std::deque, std::list) -// that will take ownership of pointers tht it stores. Those pointers will be deleted -// in its destructor. -// -// Because the contained pointers are wholly owned by the sequence, you cannot make a -// copy of the sequence. Making a copy would result in a double free. -// -// This is a no-frills class that provides no additional facilities. The user is -// responsible for managing any pointers that are removed from the list, and for making -// sure that any pointers contained in the class are not deleted elsewhere. Because -// this class does no reference counting, the user must also make sure that any pointer -// appears only once in the sequence. -// -// If more sophisticated facilities are needed, use tr1::shared_ptr or boost::shared_ptr. -// This class is only intended to allow one to eke by in projects where tr1 or boost are -// not available. -// -// Usage: The template takes two parameters, the standard container, and the class held -// in the container. This is a limitation of C++ templates, where T::iterator is not a -// type when T is a template parameter. If anyone knows a way around this -// limitation, then the second parameter can be eliminated. -// -// Example: -// PointerSequence, Widget*> v; -// v.push_back(new Widget); -// cout << v[0] << endl; // operator[] is provided by std::vector, not by PointerSequence -// v.destroy(); // Deletes all pointers in sequence and sets them to NULL. -// -// The idiom for removing a pointer from a sequence is: -// Widget* w = v[3]; -// v.erase(v.begin() + 3); // or v[3] = 0; -// The user is now responsible for disposing of w properly. -// -/////////////////////////////////////////////////////////////////////////////// - -#ifndef POINTERSEQUENCE_H -# define POINTERSEQUENCE_H +/** \file blender/freestyle/intern/system/PointerSequence.h + * \ingroup freestyle + * \brief Simple RAII wrappers for std:: sequential containers + * \author 22/11/2010 + * \date 18/03/2003 + * + * PointerSequence + * + * Produces a wrapped version of a sequence type (std::vector, std::deque, std::list) that will take ownership of + * pointers tht it stores. Those pointers will be deleted in its destructor. + * + * Because the contained pointers are wholly owned by the sequence, you cannot make a copy of the sequence. + * Making a copy would result in a double free. + * + * This is a no-frills class that provides no additional facilities. The user is responsible for managing any + * pointers that are removed from the list, and for making sure that any pointers contained in the class are not + * deleted elsewhere. Because this class does no reference counting, the user must also make sure that any pointer + * appears only once in the sequence. + * + * If more sophisticated facilities are needed, use tr1::shared_ptr or boost::shared_ptr. + * This class is only intended to allow one to eke by in projects where tr1 or boost are not available. + * + * Usage: The template takes two parameters, the standard container, and the class held in the container. This is a + * limitation of C++ templates, where T::iterator is not a type when T is a template parameter. If anyone knows a way + * around this limitation, then the second parameter can be eliminated. + * + * Example: + * PointerSequence, Widget*> v; + * v.push_back(new Widget); + * cout << v[0] << endl; // operator[] is provided by std::vector, not by PointerSequence + * v.destroy(); // Deletes all pointers in sequence and sets them to NULL. + * + * The idiom for removing a pointer from a sequence is: + * Widget* w = v[3]; + * v.erase(v.begin() + 3); // or v[3] = 0; + * The user is now responsible for disposing of w properly. + */ #include template -class PointerSequence : public C { +class PointerSequence : public C +{ PointerSequence (PointerSequence& other); - PointerSequence& operator= (PointerSequence& other); - static void destroyer (T t) { + PointerSequence& operator=(PointerSequence& other); + + static void destroyer(T t) + { delete t; } + public: PointerSequence () {}; - ~PointerSequence () { + + ~PointerSequence () + { destroy(); } - void destroy () { - for_each (this->begin(), this->end(), destroyer); + + void destroy () + { + for_each(this->begin(), this->end(), destroyer); } }; -#endif // POINTERSEQUENCE_H - +#endif // __FREESTYLE_POINTER_SEQUENCE_H__ -- cgit v1.2.3