From 351bebdf502e64c41925cda6157ab4434bd8b85f Mon Sep 17 00:00:00 2001 From: ganovelli Date: Sat, 15 Oct 2005 16:22:22 +0000 Subject: [PATCH] *** empty log message *** --- vcg/container/traced_vector.h | 188 ---------------------------------- 1 file changed, 188 deletions(-) delete mode 100644 vcg/container/traced_vector.h diff --git a/vcg/container/traced_vector.h b/vcg/container/traced_vector.h deleted file mode 100644 index a814bfd6..00000000 --- a/vcg/container/traced_vector.h +++ /dev/null @@ -1,188 +0,0 @@ -/**************************************************************************** -* VCGLib o o * -* Visual and Computer Graphics Library o o * -* _ O _ * -* Copyright(C) 2004 \/)\/ * -* Visual Computing Lab /\/| * -* ISTI - Italian National Research Council | * -* \ * -* All rights reserved. * -* * -* 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 (http://www.gnu.org/licenses/gpl.txt) * -* for more details. * -* * -****************************************************************************/ -/**************************************************************************** - History - -$Log: not supported by cvs2svn $ -Revision 1.4 2004/04/05 18:20:08 ganovelli -Aggiunto typename - -Revision 1.3 2004/03/31 22:36:44 ganovelli -First Working Release (with this comment) - -/****************************************************************************/ - -#ifndef __VCGLIB_TRACED_VECTOR__ -#define __VCGLIB_TRACED_VECTOR__ - - -#include -#include - -#include - -namespace vcg { - /*@{*/ -/*! - * This class represent a Traced Vector. A TVector is derived by a std::vector. - * The characteristic of a TVector is that you can add (at run time) new attributes - * to the container::value_type elements contained in the vector. (see the example..) - * The position in memory of a traced vector is kept by the Container Allocation Table, - * which is a (unique) list of TVector positions. - */ - -template -class TVector: public std::vector{ - typedef typename TVector ThisType; - -public: - TVector():std::vector(){reserve(1);} - ~TVector(); - - - std::list < CATBase* > attributes; - // override di tutte le funzioni che possono spostare - // l'allocazione in memoria del container - void push_back(const VALUE_TYPE & v); - void pop_back(); - void resize(const unsigned int & size); - void reserve(const unsigned int & size); - - /// this function enable the use of an optional attribute (see...) - template - void EnableAttribute(){ - CAT * cat = new CAT(); - cat->Insert(*this); - attributes.push_back(cat); - } - - /// this function disable the use of an optional attribute (see...) - /// Note: once an attribute is disabled, its data is lost (the memory freed) - template - void DisableAttribute(){ - std::list < CATBase * >::iterator ia; - for(ia = attributes.begin(); ia != attributes.end(); ++ia) - if((*ia)->Id() == CAT::Id()) - { - (*ia)->Remove(*this); - delete (*ia); - attributes.erase(ia); - break; - } - } - - /// this function create a new attribute of type ATTR_TYPE and return an handle to - /// access the value of the attribute. Ex: - /// TVector tv; - /// TempData handle = tv.NewTempData(); - /// // now handle[&tv[123]] is the value of integer attribute associate with the position 123 on the vector - /// // NOTE: it works also if you do some push_back, resize, pop_back, reserve that cause the relocation - /// // of the TVector - template - TempData NewTempData(){ - typedef typename CATEntry >::EntryType EntryTypeMulti; - CATEntry::Insert(*this); - EntryTypeMulti entry = CATEntry::GetEntry(&*begin()); - entry.Data().push_back(new Wrap< ATTR_TYPE>); - - ((Wrap*)entry.Data().back())->reserve(capacity()); - ((Wrap*)entry.Data().back())->resize(size()); - - return TempData((Wrap*) entry.Data().back()); - } - - /// reciprocal of NewTempData - template - void DeleteTempData(TempData & td){ - typedef typename CATEntry >::EntryType EntryTypeMulti; - CATEntry::RemoveIfEmpty(*this); - EntryTypeMulti - entry = CATEntry >::GetEntry(&*begin()); - - entry.Data().remove((Wrap*)td.Item()); - delete ((Wrap*)td.Item()); - } - - -private: - VALUE_TYPE * old_start; - void Update(); -}; - - /*@}*/ - -template -void TVector::push_back(const VALUE_TYPE & v){ - std::vector::push_back(v); - Update(); - std::list < CATBase * >::iterator ia; - for(ia = attributes.begin(); ia != attributes.end(); ++ia) - (*ia)->AddDataElem(&(*(this->begin())),1); - -} -template -void TVector::pop_back(){ - std::vector::pop_back(); - Update(); -} - -template -void TVector::resize(const unsigned int & size){ - std::vector::resize(size); - std::list < CATBase * >::iterator ia; - for(ia = attributes.begin(); ia != attributes.end(); ++ia) - (*ia)-> - Update(); -} - -template -void TVector::reserve(const unsigned int & size){ - std::vector::reserve(size); - Update(); -} - -template - void TVector:: - Update(){ - std::list < CATBase * >::iterator ia; - if(&(*begin()) != old_start) - for(ia = attributes.begin(); ia != attributes.end(); ++ia) - (*ia)->Resort(old_start,&(*begin())); - - old_start = &(*begin()); - } - - - -template -TVector::~TVector(){ - std::list < CATBase * >::iterator ia; - for(ia = attributes.begin(); ia != attributes.end(); ++ia) - { - (*ia)->Remove(*this); - delete *ia; - } - } - -}; // end namespace -#endif