summaryrefslogtreecommitdiff
path: root/cosv
diff options
context:
space:
mode:
authorJens-Heiner Rechtien <hr@openoffice.org>2007-11-02 16:44:49 +0000
committerJens-Heiner Rechtien <hr@openoffice.org>2007-11-02 16:44:49 +0000
commitcc252373f45e8890d4ed8cee8a8b1a70dc580858 (patch)
treee04883f74ffc41a559177e9491f161838048a6b8 /cosv
parent06b852d6a371cebb24bb7f0e87c2ed2d4c2ce2d8 (diff)
INTEGRATION: CWS adc18 (1.1.2); FILE ADDED
2007/10/19 14:09:02 np 1.1.2.2: #i81775# 2007/09/20 12:06:36 np 1.1.2.1: #i81775#
Diffstat (limited to 'cosv')
-rw-r--r--cosv/inc/cosv/tpl/tpltools.hxx236
1 files changed, 236 insertions, 0 deletions
diff --git a/cosv/inc/cosv/tpl/tpltools.hxx b/cosv/inc/cosv/tpl/tpltools.hxx
new file mode 100644
index 000000000000..66d0ecfd8470
--- /dev/null
+++ b/cosv/inc/cosv/tpl/tpltools.hxx
@@ -0,0 +1,236 @@
+/*************************************************************************
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: tpltools.hxx,v $
+ *
+ * $Revision: 1.2 $
+ *
+ * last change: $Author: hr $ $Date: 2007-11-02 17:44:49 $
+ *
+ * The Contents of this file are made available subject to
+ * the terms of GNU Lesser General Public License Version 2.1.
+ *
+ *
+ * GNU Lesser General Public License Version 2.1
+ * =============================================
+ * Copyright 2005 by Sun Microsystems, Inc.
+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ ************************************************************************/
+
+#ifndef CSV_TPLTOOLS_HXX
+#define CSV_TPLTOOLS_HXX
+
+#include <vector>
+#include <map>
+
+
+
+
+namespace csv
+{
+
+
+template <class COLLECTION>
+inline void erase_container(
+ COLLECTION & o_rCollection );
+
+/// Version for std::map
+template <class COLLECTION>
+void erase_map_of_heap_ptrs(
+ COLLECTION & o_rCollection );
+
+/// Version for other containers than std::map, with non-pair value_type.
+template <class COLLECTION>
+void erase_container_of_heap_ptrs(
+ COLLECTION & o_rCollection );
+
+template <class VECTOR_ELEM>
+void adjust_vector_size(
+ std::vector<VECTOR_ELEM> &
+ io_rVector,
+ uintt i_nSize,
+ const VECTOR_ELEM & i_nFill );
+
+
+template <class KEY, class VAL>
+const VAL * find_in_map( /// Usable for all kinds of values
+ const std::map< KEY, VAL > &
+ i_rMap,
+ const KEY & i_rKey );
+
+
+/** @return the value in the map, if it is in there, else 0.
+ @precond VAL has to be convertable to "0".
+*/
+template <class KEY, class VAL>
+VAL value_from_map(
+ const std::map< KEY, VAL > &
+ i_rMap,
+ const KEY & i_rKey );
+
+/** @return the value in the map, if it is in there, else i_notFound.
+*/
+template <class KEY, class VAL>
+VAL value_from_map(
+ const std::map< KEY, VAL > &
+ i_rMap,
+ const KEY & i_rKey,
+ VAL i_notFound );
+
+template <class COLLECTION, class VALUE>
+bool contains(
+ const COLLECTION & i_collection,
+ const VALUE & i_value );
+
+// Object oriented for_each:
+template <class COLLECTION, class CLASS, class MEMFUNC>
+void call_for_each(
+ const COLLECTION & i_rList,
+ CLASS * io_pThis,
+ MEMFUNC i_fMethod );
+
+
+
+
+// IMPLEMENTATION
+template <class COLLECTION>
+inline void
+erase_container( COLLECTION & o_rCollection )
+{
+ o_rCollection.erase( o_rCollection.begin(),
+ o_rCollection.end() );
+}
+
+template <class COLLECTION>
+void
+erase_map_of_heap_ptrs( COLLECTION & o_rCollection )
+{
+ typename COLLECTION::iterator itEnd = o_rCollection.end();
+ for ( typename COLLECTION::iterator it = o_rCollection.begin();
+ it != itEnd;
+ ++it )
+ {
+ delete (*it).second;
+ }
+
+ o_rCollection.erase( o_rCollection.begin(),
+ o_rCollection.end() );
+}
+
+template <class COLLECTION>
+void
+erase_container_of_heap_ptrs( COLLECTION & o_rCollection )
+{
+ typename COLLECTION::iterator itEnd = o_rCollection.end();
+ for ( typename COLLECTION::iterator it = o_rCollection.begin();
+ it != itEnd;
+ ++it )
+ {
+ delete *it;
+ }
+
+ o_rCollection.erase( o_rCollection.begin(),
+ o_rCollection.end() );
+}
+
+template <class VECTOR_ELEM>
+void
+adjust_vector_size( std::vector<VECTOR_ELEM> & io_rVector,
+ uintt i_nSize,
+ const VECTOR_ELEM & i_nFill )
+{
+ if ( io_rVector.size() > i_nSize )
+ {
+ io_rVector.erase( io_rVector.begin() + i_nSize, io_rVector.end() );
+ }
+ else
+ {
+ io_rVector.reserve(i_nSize);
+ while ( io_rVector.size() < i_nSize )
+ io_rVector.push_back(i_nFill);
+ }
+}
+
+
+template <class KEY, class VAL>
+const VAL *
+find_in_map( const std::map< KEY, VAL > & i_rMap,
+ const KEY & i_rKey )
+{
+ typename std::map< KEY, VAL >::const_iterator
+ ret = i_rMap.find(i_rKey);
+ return ret != i_rMap.end()
+ ? & (*ret).second
+ : (const VAL*)0;
+}
+
+template <class KEY, class VAL>
+VAL
+value_from_map( const std::map< KEY, VAL > & i_rMap,
+ const KEY & i_rKey )
+{
+ typename std::map< KEY, VAL >::const_iterator
+ ret = i_rMap.find(i_rKey);
+ return ret != i_rMap.end()
+ ? (*ret).second
+ : VAL(0);
+}
+
+template <class KEY, class VAL>
+VAL
+value_from_map( const std::map< KEY, VAL > & i_rMap,
+ const KEY & i_rKey,
+ VAL i_notFound )
+{
+ typename std::map< KEY, VAL >::const_iterator
+ ret = i_rMap.find(i_rKey);
+ return ret != i_rMap.end()
+ ? (*ret).second
+ : i_notFound;
+}
+
+template <class COLLECTION, class VALUE>
+bool
+contains( const COLLECTION & i_collection,
+ const VALUE & i_value )
+{
+ return std::find(i_collection.begin(), i_collection.end(), i_value)
+ !=
+ i_collection.end();
+}
+
+template <class COLLECTION, class CLASS, class MEMFUNC>
+void
+call_for_each( const COLLECTION & i_rList,
+ CLASS * io_pThis,
+ MEMFUNC i_fMethod )
+{
+ typename COLLECTION::const_iterator it = i_rList.begin();
+ typename COLLECTION::const_iterator itEnd = i_rList.end();
+ for ( ; it != itEnd; ++it )
+ {
+ (io_pThis->*i_fMethod)(*it);
+ }
+}
+
+
+
+
+} // namespace csv
+#endif