diff options
author | monster <monster@ydb.tech> | 2022-07-07 14:41:37 +0300 |
---|---|---|
committer | monster <monster@ydb.tech> | 2022-07-07 14:41:37 +0300 |
commit | 06e5c21a835c0e923506c4ff27929f34e00761c2 (patch) | |
tree | 75efcbc6854ef9bd476eb8bf00cc5c900da436a2 /contrib/tools/ragel5 | |
parent | 03f024c4412e3aa613bb543cf1660176320ba8f4 (diff) | |
download | ydb-06e5c21a835c0e923506c4ff27929f34e00761c2.tar.gz |
fix ya.make
Diffstat (limited to 'contrib/tools/ragel5')
-rw-r--r-- | contrib/tools/ragel5/aapl/avlibasic.h | 67 | ||||
-rw-r--r-- | contrib/tools/ragel5/aapl/avlikeyless.h | 64 | ||||
-rw-r--r-- | contrib/tools/ragel5/aapl/avlimap.h | 77 | ||||
-rw-r--r-- | contrib/tools/ragel5/aapl/avlimel.h | 79 | ||||
-rw-r--r-- | contrib/tools/ragel5/aapl/avlimelkey.h | 76 | ||||
-rw-r--r-- | contrib/tools/ragel5/aapl/avliset.h | 75 | ||||
-rw-r--r-- | contrib/tools/ragel5/aapl/avlitree.h | 78 | ||||
-rw-r--r-- | contrib/tools/ragel5/aapl/avlkeyless.h | 58 | ||||
-rw-r--r-- | contrib/tools/ragel5/aapl/avlmel.h | 74 | ||||
-rw-r--r-- | contrib/tools/ragel5/aapl/avlmelkey.h | 71 | ||||
-rw-r--r-- | contrib/tools/ragel5/aapl/bsttable.h | 84 | ||||
-rw-r--r-- | contrib/tools/ragel5/aapl/dlistmel.h | 70 | ||||
-rw-r--r-- | contrib/tools/ragel5/aapl/dlistval.h | 70 | ||||
-rw-r--r-- | contrib/tools/ragel5/aapl/insertsort.h | 94 | ||||
-rw-r--r-- | contrib/tools/ragel5/aapl/quicksort.h | 185 | ||||
-rw-r--r-- | contrib/tools/ragel5/aapl/resize.h | 344 |
16 files changed, 0 insertions, 1566 deletions
diff --git a/contrib/tools/ragel5/aapl/avlibasic.h b/contrib/tools/ragel5/aapl/avlibasic.h deleted file mode 100644 index a48faaa8fb..0000000000 --- a/contrib/tools/ragel5/aapl/avlibasic.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright 2002 Adrian Thurston <thurston@cs.queensu.ca> - */ - -/* This file is part of Aapl. - * - * Aapl is free software; you can redistribute it and/or modify it under the - * terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * Aapl 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 Aapl; if not, write to the Free Software Foundation, Inc., 59 - * Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef _AAPL_AVLIBASIC_H -#define _AAPL_AVLIBASIC_H - -#include "compare.h" - -/** - * \addtogroup avlitree - * @{ - */ - -/** - * \class AvliBasic - * \brief Linked AVL Tree in which the entire element structure is the key. - * - * AvliBasic is a linked AVL tree that does not distinguish between the - * element that it contains and the key. The entire element structure is the - * key that is used to compare the relative ordering of elements. This is - * similar to the BstSet structure. - * - * AvliBasic does not assume ownership of elements in the tree. Items must be - * explicitly de-allocated. - */ - -/*@}*/ - -#define BASE_EL(name) name -#define BASEKEY(name) name -#define AVLMEL_CLASSDEF class Element, class Compare -#define AVLMEL_TEMPDEF class Element, class Compare -#define AVLMEL_TEMPUSE Element, Compare -#define AvlTree AvliBasic -#define AVL_BASIC -#define WALKABLE - -#include "avlcommon.h" - -#undef BASE_EL -#undef BASEKEY -#undef AVLMEL_CLASSDEF -#undef AVLMEL_TEMPDEF -#undef AVLMEL_TEMPUSE -#undef AvlTree -#undef AVL_BASIC -#undef WALKABLE - -#endif /* _AAPL_AVLIBASIC_H */ diff --git a/contrib/tools/ragel5/aapl/avlikeyless.h b/contrib/tools/ragel5/aapl/avlikeyless.h deleted file mode 100644 index 559b75afda..0000000000 --- a/contrib/tools/ragel5/aapl/avlikeyless.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 2002, 2003 Adrian Thurston <thurston@cs.queensu.ca> - */ - -/* This file is part of Aapl. - * - * Aapl is free software; you can redistribute it and/or modify it under the - * terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * Aapl 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 Aapl; if not, write to the Free Software Foundation, Inc., 59 - * Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef _AAPL_AVLIKEYLESS_H -#define _AAPL_AVLIKEYLESS_H - -#include "compare.h" -#include "dlistmel.h" - -/** - * \addtogroup avlitree - * @{ - */ - -/** - * \class AvliKeyless - * \brief Linked AVL tree that has no insert/find/remove functions that take a - * key. - * - * AvliKeyless is an implementation of the AVL tree rebalancing functionality - * only. It provides the common code for the tiny AVL tree implementations. - */ - -/*@}*/ - -#define BASE_EL(name) name -#define BASELIST DListMel< Element, AvliTreeEl<Element> > -#define AVLMEL_CLASSDEF class Element -#define AVLMEL_TEMPDEF class Element -#define AVLMEL_TEMPUSE Element -#define AvlTree AvliKeyless -#define WALKABLE -#define AVL_KEYLESS - -#include "avlcommon.h" - -#undef BASE_EL -#undef BASELIST -#undef AVLMEL_CLASSDEF -#undef AVLMEL_TEMPDEF -#undef AVLMEL_TEMPUSE -#undef AvlTree -#undef WALKABLE -#undef AVL_KEYLESS - -#endif /* _AAPL_AVLIKEYLESS_H */ diff --git a/contrib/tools/ragel5/aapl/avlimap.h b/contrib/tools/ragel5/aapl/avlimap.h deleted file mode 100644 index 38bfff752a..0000000000 --- a/contrib/tools/ragel5/aapl/avlimap.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright 2002 Adrian Thurston <thurston@cs.queensu.ca> - */ - -/* This file is part of Aapl. - * - * Aapl is free software; you can redistribute it and/or modify it under the - * terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * Aapl 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 Aapl; if not, write to the Free Software Foundation, Inc., 59 - * Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef _AAPL_AVLIMAP_H -#define _AAPL_AVLIMAP_H - -#include "compare.h" -#include "dlist.h" - -/** - * \addtogroup avlitree - * @{ - */ - -/** - * \class AvliMap - * \brief Linked key and value oriented AVL tree. - * - * AvliMap stores key and value pairs in elements that managed by the tree. It - * is intendend to be similar to map template found in the STL. AvliMap - * requires that a Key type, a Value type, and a class containing a compare() - * routine for Key be given. Items can be inserted with just a key or with a - * key and value pair. - * - * AvliMap assumes all elements in the tree are allocated on the heap and are - * to be managed by the tree. This means that the class destructor will delete - * the contents of the tree. A deep copy will cause existing elements to be - * deleted first. - * - * \include ex_avlimap.cpp - */ - -/*@}*/ - -#define AVLTREE_MAP -#define BASE_EL(name) name -#define BASEKEY(name) name -#define BASELIST DList< AvliMapEl<Key,Value> > -#define AVLMEL_CLASSDEF class Key, class Value, class Compare = CmpOrd<Key> -#define AVLMEL_TEMPDEF class Key, class Value, class Compare -#define AVLMEL_TEMPUSE Key, Value, Compare -#define AvlTree AvliMap -#define Element AvliMapEl<Key,Value> -#define WALKABLE - -#include "avlcommon.h" - -#undef AVLTREE_MAP -#undef BASE_EL -#undef BASEKEY -#undef BASELIST -#undef AVLMEL_CLASSDEF -#undef AVLMEL_TEMPDEF -#undef AVLMEL_TEMPUSE -#undef AvlTree -#undef Element -#undef WALKABLE - -#endif /* _AAPL_AVLIMAP_H */ diff --git a/contrib/tools/ragel5/aapl/avlimel.h b/contrib/tools/ragel5/aapl/avlimel.h deleted file mode 100644 index 9442a9972d..0000000000 --- a/contrib/tools/ragel5/aapl/avlimel.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright 2002 Adrian Thurston <thurston@cs.queensu.ca> - */ - -/* This file is part of Aapl. - * - * Aapl is free software; you can redistribute it and/or modify it under the - * terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * Aapl 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 Aapl; if not, write to the Free Software Foundation, Inc., 59 - * Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef _AAPL_AVLIMEL_H -#define _AAPL_AVLIMEL_H - -#include "compare.h" -#include "dlistmel.h" - -/** - * \addtogroup avlitree - * @{ - */ - -/** - * \class AvliMel - * \brief Linked AVL tree for element appearing in multiple trees. - * - * AvliMel allows for an element to simultaneously be in multiple trees without - * the trees interferring with one another. For each tree that the element is - * to appear in, there must be a distinct set of AVL Tree management data that - * can be unambiguously referenced with some base class name. This name - * is passed to the tree as a template parameter and is used in the tree - * algorithms. - * - * The element must use the same key type and value in each tree that it - * appears in. If distinct keys are required, the AvliMelKey structure is - * available. - * - * AvliMel does not assume ownership of elements in the tree. The destructor - * will not delete the elements. If the user wishes to explicitly deallocate - * all the items in the tree the empty() routine is available. - * - * \include ex_avlimel.cpp - */ - -/*@}*/ - -#define BASE_EL(name) BaseEl::name -#define BASEKEY(name) name -#define BASELIST DListMel< Element, BaseEl > -#define AVLMEL_CLASSDEF class Element, class Key, \ - class BaseEl, class Compare = CmpOrd<Key> -#define AVLMEL_TEMPDEF class Element, class Key, \ - class BaseEl, class Compare -#define AVLMEL_TEMPUSE Element, Key, BaseEl, Compare -#define AvlTree AvliMel -#define WALKABLE - -#include "avlcommon.h" - -#undef BASE_EL -#undef BASEKEY -#undef BASELIST -#undef AVLMEL_CLASSDEF -#undef AVLMEL_TEMPDEF -#undef AVLMEL_TEMPUSE -#undef AvlTree -#undef WALKABLE - -#endif /* _AAPL_AVLIMEL_H */ diff --git a/contrib/tools/ragel5/aapl/avlimelkey.h b/contrib/tools/ragel5/aapl/avlimelkey.h deleted file mode 100644 index faa56e8354..0000000000 --- a/contrib/tools/ragel5/aapl/avlimelkey.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright 2002 Adrian Thurston <thurston@cs.queensu.ca> - */ - -/* This file is part of Aapl. - * - * Aapl is free software; you can redistribute it and/or modify it under the - * terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * Aapl 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 Aapl; if not, write to the Free Software Foundation, Inc., 59 - * Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef _AAPL_AVLIMELKEY_H -#define _AAPL_AVLIMELKEY_H - -#include "compare.h" -#include "dlistmel.h" - -/** - * \addtogroup avlitree - * @{ - */ - -/** - * \class AvliMelKey - * \brief Linked AVL tree for element appearing in multiple trees with different keys. - * - * AvliMelKey is similar to AvliMel, except that an additional template - * parameter, BaseKey, is provided for resolving ambiguous references to - * getKey(). This means that if an element is stored in multiple trees, each - * tree can use a different key for ordering the elements in it. Using - * AvliMelKey an array of data structures can be indexed with an O(log(n)) - * search on two or more of the values contained within it and without - * allocating any additional data. - * - * AvliMelKey does not assume ownership of elements in the tree. The destructor - * will not delete the elements. If the user wishes to explicitly deallocate - * all the items in the tree the empty() routine is available. - * - * \include ex_avlimelkey.cpp - */ - -/*@}*/ - -#define BASE_EL(name) BaseEl::name -#define BASEKEY(name) BaseKey::name -#define BASELIST DListMel< Element, BaseEl > -#define AVLMEL_CLASSDEF class Element, class Key, class BaseEl, \ - class BaseKey, class Compare = CmpOrd<Key> -#define AVLMEL_TEMPDEF class Element, class Key, class BaseEl, \ - class BaseKey, class Compare -#define AVLMEL_TEMPUSE Element, Key, BaseEl, BaseKey, Compare -#define AvlTree AvliMelKey -#define WALKABLE - -#include "avlcommon.h" - -#undef BASE_EL -#undef BASEKEY -#undef BASELIST -#undef AVLMEL_CLASSDEF -#undef AVLMEL_TEMPDEF -#undef AVLMEL_TEMPUSE -#undef AvlTree -#undef WALKABLE - -#endif /* _AAPL_AVLIMELKEY_H */ diff --git a/contrib/tools/ragel5/aapl/avliset.h b/contrib/tools/ragel5/aapl/avliset.h deleted file mode 100644 index cf5be365ee..0000000000 --- a/contrib/tools/ragel5/aapl/avliset.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2002 Adrian Thurston <thurston@cs.queensu.ca> - */ - -/* This file is part of Aapl. - * - * Aapl is free software; you can redistribute it and/or modify it under the - * terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * Aapl 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 Aapl; if not, write to the Free Software Foundation, Inc., 59 - * Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef _AAPL_AVLISET_H -#define _AAPL_AVLISET_H - -#include "compare.h" -#include "dlist.h" - -/** - * \addtogroup avlitree - * @{ - */ - -/** - * \class AvliSet - * \brief Linked Key-only oriented tree. - * - * AvliSet stores only keys in elements that are managed by the tree. AvliSet - * requires that a Key type and a class containing a compare() routine - * for Key be given. Items are inserted with just a key value. - * - * AvliSet assumes all elements in the tree are allocated on the heap and are - * to be managed by the tree. This means that the class destructor will delete - * the contents of the tree. A deep copy will cause existing elements to be - * deleted first. - * - * \include ex_avliset.cpp - */ - -/*@}*/ - -#define AVLTREE_SET -#define BASE_EL(name) name -#define BASEKEY(name) name -#define BASELIST DList< AvliSetEl<Key> > -#define AVLMEL_CLASSDEF class Key, class Compare = CmpOrd<Key> -#define AVLMEL_TEMPDEF class Key, class Compare -#define AVLMEL_TEMPUSE Key, Compare -#define AvlTree AvliSet -#define Element AvliSetEl<Key> -#define WALKABLE - -#include "avlcommon.h" - -#undef AVLTREE_SET -#undef BASE_EL -#undef BASEKEY -#undef BASELIST -#undef AVLMEL_CLASSDEF -#undef AVLMEL_TEMPDEF -#undef AVLMEL_TEMPUSE -#undef AvlTree -#undef Element -#undef WALKABLE - -#endif /* _AAPL_AVLISET_H */ diff --git a/contrib/tools/ragel5/aapl/avlitree.h b/contrib/tools/ragel5/aapl/avlitree.h deleted file mode 100644 index b053c96fb1..0000000000 --- a/contrib/tools/ragel5/aapl/avlitree.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright 2002 Adrian Thurston <thurston@cs.queensu.ca> - */ - -/* This file is part of Aapl. - * - * Aapl is free software; you can redistribute it and/or modify it under the - * terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * Aapl 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 Aapl; if not, write to the Free Software Foundation, Inc., 59 - * Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef _AAPL_AVLITREE_H -#define _AAPL_AVLITREE_H - -#include "compare.h" -#include "dlistmel.h" - -/** - * \addtogroup avlitree - * @{ - */ - -/** - * \class AvliTree - * \brief Linked AVL tree. - * - * AvliTree is the standard linked by-structure AVL tree. To use this - * structure the user must define an element type and give it the necessary - * properties. At the very least it must have a getKey() function that will be - * used to compare the relative ordering of elements and tree management data - * necessary for the AVL algorithm. An element type can acquire the management - * data by inheriting the AvliTreeEl class. - * - * AvliTree does not presume to manage the allocation of elements in the tree. - * The destructor will not delete the items in the tree, instead the elements - * must be explicitly de-allocated by the user if necessary and when it is - * safe to do so. The empty() routine will traverse the tree and delete all - * items. - * - * Since the tree does not manage the elements, it can contain elements that - * are allocated statically or that are part of another data structure. - * - * \include ex_avlitree.cpp - */ - -/*@}*/ - -#define BASE_EL(name) name -#define BASEKEY(name) name -#define BASELIST DListMel< Element, AvliTreeEl<Element> > -#define AVLMEL_CLASSDEF class Element, class Key, class Compare = CmpOrd<Key> -#define AVLMEL_TEMPDEF class Element, class Key, class Compare -#define AVLMEL_TEMPUSE Element, Key, Compare -#define AvlTree AvliTree -#define WALKABLE - -#include "avlcommon.h" - -#undef BASE_EL -#undef BASEKEY -#undef BASELIST -#undef AVLMEL_CLASSDEF -#undef AVLMEL_TEMPDEF -#undef AVLMEL_TEMPUSE -#undef AvlTree -#undef WALKABLE - -#endif /* _AAPL_AVLITREE_H */ diff --git a/contrib/tools/ragel5/aapl/avlkeyless.h b/contrib/tools/ragel5/aapl/avlkeyless.h deleted file mode 100644 index 3080513655..0000000000 --- a/contrib/tools/ragel5/aapl/avlkeyless.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright 2002, 2003 Adrian Thurston <thurston@cs.queensu.ca> - */ - -/* This file is part of Aapl. - * - * Aapl is free software; you can redistribute it and/or modify it under the - * terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * Aapl 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 Aapl; if not, write to the Free Software Foundation, Inc., 59 - * Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef _AAPL_AVLKEYLESS_H -#define _AAPL_AVLKEYLESS_H - -#include "compare.h" - -/** - * \addtogroup avltree - * @{ - */ - -/** - * \class AvlKeyless - * \brief AVL tree that has no insert/find/remove functions that take a key. - * - * AvlKeyless is an implementation of the AVL tree rebalancing functionality - * only. It provides the common code for the tiny AVL tree implementations. - */ - -/*@}*/ - -#define BASE_EL(name) name -#define AVLMEL_CLASSDEF class Element -#define AVLMEL_TEMPDEF class Element -#define AVLMEL_TEMPUSE Element -#define AvlTree AvlKeyless -#define AVL_KEYLESS - -#include "avlcommon.h" - -#undef BASE_EL -#undef AVLMEL_CLASSDEF -#undef AVLMEL_TEMPDEF -#undef AVLMEL_TEMPUSE -#undef AvlTree -#undef AVL_KEYLESS - -#endif /* _AAPL_AVLKEYLESS_H */ diff --git a/contrib/tools/ragel5/aapl/avlmel.h b/contrib/tools/ragel5/aapl/avlmel.h deleted file mode 100644 index 7bfad3b7d0..0000000000 --- a/contrib/tools/ragel5/aapl/avlmel.h +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright 2002 Adrian Thurston <thurston@cs.queensu.ca> - */ - -/* This file is part of Aapl. - * - * Aapl is free software; you can redistribute it and/or modify it under the - * terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * Aapl 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 Aapl; if not, write to the Free Software Foundation, Inc., 59 - * Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef _AAPL_AVLMEL_H -#define _AAPL_AVLMEL_H - -#include "compare.h" - -/** - * \addtogroup avltree - * @{ - */ - -/** - * \class AvlMel - * \brief AVL tree for elements appearing in multiple trees. - * - * AvlMel allows for an element to simultaneously be in multiple trees without - * the trees interferring with one another. For each tree that the element is - * to appear in, there must be a distinct set of AVL Tree management data that - * can be unambiguously referenced with some base class name. This name - * is passed to the tree as a template parameter and is used in the tree - * algorithms. - * - * The element must use the same key type and value in each tree that it - * appears in. If distinct keys are required, the AvlMelKey structure is - * available. - * - * AvlMel does not assume ownership of elements in the tree. The destructor - * will not delete the elements. If the user wishes to explicitly deallocate - * all the items in the tree the empty() routine is available. - * - * \include ex_avlmel.cpp - */ - -/*@}*/ - -#define BASE_EL(name) BaseEl::name -#define BASEKEY(name) name -#define AVLMEL_CLASSDEF class Element, class Key, \ - class BaseEl, class Compare = CmpOrd<Key> -#define AVLMEL_TEMPDEF class Element, class Key, \ - class BaseEl, class Compare -#define AVLMEL_TEMPUSE Element, Key, BaseEl, Compare -#define AvlTree AvlMel - -#include "avlcommon.h" - -#undef BASE_EL -#undef BASEKEY -#undef AVLMEL_CLASSDEF -#undef AVLMEL_TEMPDEF -#undef AVLMEL_TEMPUSE -#undef AvlTree - -#endif /* _AAPL_AVLMEL_H */ diff --git a/contrib/tools/ragel5/aapl/avlmelkey.h b/contrib/tools/ragel5/aapl/avlmelkey.h deleted file mode 100644 index 9261cc8304..0000000000 --- a/contrib/tools/ragel5/aapl/avlmelkey.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2002 Adrian Thurston <thurston@cs.queensu.ca> - */ - -/* This file is part of Aapl. - * - * Aapl is free software; you can redistribute it and/or modify it under the - * terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * Aapl 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 Aapl; if not, write to the Free Software Foundation, Inc., 59 - * Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef _AAPL_AVLMELKEY_H -#define _AAPL_AVLMELKEY_H - -#include "compare.h" - -/** - * \addtogroup avltree - * @{ - */ - -/** - * \class AvlMelKey - * \brief AVL tree for elements appearing in multiple trees with different keys. - * - * AvlMelKey is similar to AvlMel, except that an additional template - * parameter, BaseKey, is provided for resolving ambiguous references to - * getKey(). This means that if an element is stored in multiple trees, each - * tree can use a different key for ordering the elements in it. Using - * AvlMelKey an array of data structures can be indexed with an O(log(n)) - * search on two or more of the values contained within it and without - * allocating any additional data. - * - * AvlMelKey does not assume ownership of elements in the tree. The destructor - * will not delete the elements. If the user wishes to explicitly deallocate - * all the items in the tree the empty() routine is available. - * - * \include ex_avlmelkey.cpp - */ - -/*@}*/ - -#define BASE_EL(name) BaseEl::name -#define BASEKEY(name) BaseKey::name -#define AVLMEL_CLASSDEF class Element, class Key, class BaseEl, \ - class BaseKey, class Compare = CmpOrd<Key> -#define AVLMEL_TEMPDEF class Element, class Key, class BaseEl, \ - class BaseKey, class Compare -#define AVLMEL_TEMPUSE Element, Key, BaseEl, BaseKey, Compare -#define AvlTree AvlMelKey - -#include "avlcommon.h" - -#undef BASE_EL -#undef BASEKEY -#undef AVLMEL_CLASSDEF -#undef AVLMEL_TEMPDEF -#undef AVLMEL_TEMPUSE -#undef AvlTree - -#endif /* _AAPL_AVLMELKEY_H */ diff --git a/contrib/tools/ragel5/aapl/bsttable.h b/contrib/tools/ragel5/aapl/bsttable.h deleted file mode 100644 index 9898ebff16..0000000000 --- a/contrib/tools/ragel5/aapl/bsttable.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright 2002 Adrian Thurston <thurston@cs.queensu.ca> - */ - -/* This file is part of Aapl. - * - * Aapl is free software; you can redistribute it and/or modify it under the - * terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * Aapl 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 Aapl; if not, write to the Free Software Foundation, Inc., 59 - * Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef _AAPL_BSTTABLE_H -#define _AAPL_BSTTABLE_H - -#include "compare.h" -#include "vector.h" - -/** - * \addtogroup bst - * @{ - */ - -/** - * \class BstTable - * \brief Binary search table for structures that contain a key. - * - * This is the basic binary search table. It can be used to contain a - * structure that has a key and possibly some data. The key should be a member - * of the element class and accessible with getKey(). A class containing the - * compare routine must be supplied. - */ - -/*@}*/ - -#define BST_TEMPL_DECLARE class Element, class Key, \ - class Compare = CmpOrd<Key>, class Resize = ResizeExpn -#define BST_TEMPL_DEF class Element, class Key, class Compare, class Resize -#define BST_TEMPL_USE Element, Key, Compare, Resize -#define GET_KEY(el) ((el).getKey()) -#define BSTTABLE - -#include "bstcommon.h" - -#undef BST_TEMPL_DECLARE -#undef BST_TEMPL_DEF -#undef BST_TEMPL_USE -#undef GET_KEY -#undef BSTTABLE - -/** - * \fn BstTable::insert(const Key &key, Element **lastFound) - * \brief Insert a new element with the given key. - * - * If the given key does not already exist in the table a new element is - * inserted with the given key. A constructor taking only const Key& is used - * to initialize the new element. If lastFound is given, it is set to the new - * element created. If the insert fails then lastFound is set to the existing - * element with the same key. - * - * \returns The new element created upon success, null upon failure. - */ - -/** - * \fn BstTable::insertMulti(const Key &key) - * \brief Insert a new element even if the key exists already. - * - * If the key exists already then the new element is placed next to some - * element with the same key. InsertMulti cannot fail. A constructor taking - * only const Key& is used to initialize the new element. - * - * \returns The new element created. - */ - -#endif /* _AAPL_BSTTABLE_H */ diff --git a/contrib/tools/ragel5/aapl/dlistmel.h b/contrib/tools/ragel5/aapl/dlistmel.h deleted file mode 100644 index c6274acfbb..0000000000 --- a/contrib/tools/ragel5/aapl/dlistmel.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2001 Adrian Thurston <thurston@cs.queensu.ca> - */ - -/* This file is part of Aapl. - * - * Aapl is free software; you can redistribute it and/or modify it under the - * terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * Aapl 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 Aapl; if not, write to the Free Software Foundation, Inc., 59 - * Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef _AAPL_DLISTMEL_H -#define _AAPL_DLISTMEL_H - -/** - * \addtogroup dlist - * @{ - */ - -/** - * \class DListMel - * \brief Doubly linked list for elements that may appear in multiple lists. - * - * This class is similar to DList, except that the user defined list element - * can inherit from multple DListEl classes and consequently be an element in - * multiple lists. In other words, DListMel allows a single instance of a data - * structure to be an element in multiple lists without the lists interfereing - * with one another. - * - * For each list that an element class is to appear in, the element must have - * unique next and previous pointers that can be unambiguously refered to with - * some base class name. This name is given to DListMel as a template argument - * so it can use the correct next and previous pointers in its list - * operations. - * - * DListMel does not assume ownership of elements in the list. If the elements - * are known to reside on the heap and are not contained in any other list or - * data structure, the provided empty() routine can be used to delete all - * elements, however the destructor will not call this routine, it will simply - * abandon all the elements. It is up to the programmer to explicitly - * de-allocate items when it is safe to do so. - * - * \include ex_dlistmel.cpp - */ - -/*@}*/ - -#define BASE_EL(name) BaseEl::name -#define DLMEL_TEMPDEF class Element, class BaseEl -#define DLMEL_TEMPUSE Element, BaseEl -#define DList DListMel - -#include "dlcommon.h" - -#undef BASE_EL -#undef DLMEL_TEMPDEF -#undef DLMEL_TEMPUSE -#undef DList - -#endif /* _AAPL_DLISTMEL_H */ diff --git a/contrib/tools/ragel5/aapl/dlistval.h b/contrib/tools/ragel5/aapl/dlistval.h deleted file mode 100644 index 21aaf1d456..0000000000 --- a/contrib/tools/ragel5/aapl/dlistval.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2002 Adrian Thurston <thurston@cs.queensu.ca> - */ - -/* This file is part of Aapl. - * - * Aapl is free software; you can redistribute it and/or modify it under the - * terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * Aapl 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 Aapl; if not, write to the Free Software Foundation, Inc., 59 - * Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef _AAPL_DLISTVAL_H -#define _AAPL_DLISTVAL_H - -/** - * \addtogroup dlist - * @{ - */ - -/** - * \class DListVal - * \brief By-value doubly linked list. - * - * This class is a doubly linked list that does not require a list element - * type to be declared. The user instead gives a type that is to be stored in - * the list element. When inserting a new data item, the value is copied into - * a newly allocated element. This list is inteded to behave and be utilized - * like the list template found in the STL. - * - * DListVal is different from the other lists in that it allocates elements - * itself. The raw element insert interface is still exposed for convenience, - * however, the list assumes all elements in the list are allocated on the - * heap and are to be managed by the list. The destructor WILL delete the - * contents of the list. If the list is ever copied in from another list, the - * existing contents are deleted first. This is in contrast to DList and - * DListMel, which will never delete their contents to allow for statically - * allocated elements. - * - * \include ex_dlistval.cpp - */ - -/*@}*/ - -#define BASE_EL(name) name -#define DLMEL_TEMPDEF class T -#define DLMEL_TEMPUSE T -#define DList DListVal -#define Element DListValEl<T> -#define DOUBLELIST_VALUE - -#include "dlcommon.h" - -#undef BASE_EL -#undef DLMEL_TEMPDEF -#undef DLMEL_TEMPUSE -#undef DList -#undef Element -#undef DOUBLELIST_VALUE - -#endif /* _AAPL_DLISTVAL_H */ diff --git a/contrib/tools/ragel5/aapl/insertsort.h b/contrib/tools/ragel5/aapl/insertsort.h deleted file mode 100644 index eb3e264954..0000000000 --- a/contrib/tools/ragel5/aapl/insertsort.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright 2002 Adrian Thurston <thurston@cs.queensu.ca> - */ - -/* This file is part of Aapl. - * - * Aapl is free software; you can redistribute it and/or modify it under the - * terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * Aapl 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 Aapl; if not, write to the Free Software Foundation, Inc., 59 - * Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef _AAPL_INSERTSORT_H -#define _AAPL_INSERTSORT_H - -#ifdef AAPL_NAMESPACE -namespace Aapl { -#endif - -/** - * \addtogroup sort - * @{ - */ - -/** - * \class InsertSort - * \brief Insertion sort an array of data. - * - * InsertSort can be used to sort any array of objects of type T provided a - * compare class is given. InsertSort is in-place. It does not require any - * temporary storage. - * - * Objects are not made aware that they are being moved around in memory. - * Assignment operators, constructors and destructors are never invoked by the - * sort. - * - * InsertSort runs in O(n^2) time. It is most useful when sorting small arrays. - * where it can outperform the O(n*log(n)) sorters due to its simplicity. - * InsertSort is a not a stable sort. Elements with the same key will not have - * their relative ordering preserved. - */ - -/*@}*/ - -/* InsertSort. */ -template <class T, class Compare> class InsertSort - : public Compare -{ -public: - /* Sorting interface routine. */ - void sort(T *data, long len); -}; - - -/** - * \brief Insertion sort an array of data. - */ -template <class T, class Compare> - void InsertSort<T,Compare>::sort(T *data, long len) -{ - /* For each next largest spot in the sorted array... */ - for ( T *dest = data; dest < data+len-1; dest++ ) { - /* Find the next smallest element in the unsorted array. */ - T *smallest = dest; - for ( T *src = dest+1; src < data+len; src++ ) { - /* If src is smaller than the current src, then use it. */ - if ( compare( *src, *smallest ) < 0 ) - smallest = src; - } - - if ( smallest != dest ) { - /* Swap dest, smallest. */ - char tmp[sizeof(T)]; - memcpy( tmp, dest, sizeof(T) ); - memcpy( dest, smallest, sizeof(T) ); - memcpy( smallest, tmp, sizeof(T) ); - } - } -} - -#ifdef AAPL_NAMESPACE -} -#endif - -#endif /* _AAPL_INSERTSORT_H */ diff --git a/contrib/tools/ragel5/aapl/quicksort.h b/contrib/tools/ragel5/aapl/quicksort.h deleted file mode 100644 index 9bb96efd18..0000000000 --- a/contrib/tools/ragel5/aapl/quicksort.h +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Copyright 2002 Adrian Thurston <thurston@cs.queensu.ca> - */ - -/* This file is part of Aapl. - * - * Aapl is free software; you can redistribute it and/or modify it under the - * terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * Aapl 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 Aapl; if not, write to the Free Software Foundation, Inc., 59 - * Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef _AAPL_QUICKSORT_H -#define _AAPL_QUICKSORT_H - -#include "insertsort.h" - -#ifdef AAPL_NAMESPACE -namespace Aapl { -#endif - -/** - * \addtogroup sort - * @{ - */ - -/** - * \class QuickSort - * \brief Quick sort an array of data. - * - * QuickSort can be used to sort any array of objects of type T provided a - * compare class is given. QuickSort is in-place. It does not require any - * temporary storage. - * - * Objects are not made aware that they are being moved around in memory. - * Assignment operators, constructors and destructors are never invoked by the - * sort. - * - * QuickSort runs in O(n*log(n)) time in the average case. It is faster than - * mergsort in the average case because it does less moving of data. The - * performance of quicksort depends mostly on the choice of pivot. This - * implementation picks the pivot as the median of first, middle, last. This - * choice of pivot avoids the O(n^2) worst case for input already sorted, but - * it is still possible to encounter the O(n^2) worst case. For example an - * array of identical elements will run in O(n^2) - * - * QuickSort is not a stable sort. Elements with the same key will not have - * their relative ordering preserved. QuickSort switches to an InsertSort - * when the size of the array being sorted is small. This happens when - * directly sorting a small array or when QuickSort calls iteself recursively - * on a small portion of a larger array. - */ - -/*@}*/ - -/* QuickSort. */ -template <class T, class Compare> class QuickSort : - public InsertSort<T, Compare> -{ -public: - /* Sorting interface routine. */ - void sort(T *data, long len); - -private: - /* Recursive worker. */ - void doSort(T *start, T *end); - T *partition(T *start, T *end); - inline T *median(T *start, T *end); -}; - -#define _QS_INSERTION_THRESH 16 - -/* Finds the median of start, middle, end. */ -template <class T, class Compare> T *QuickSort<T,Compare>:: - median(T *start, T *end) -{ - T *pivot, *mid = start + (end-start)/2; - - /* CChoose the pivot. */ - if ( compare(*start, *mid) < 0 ) { - if ( compare(*mid, *end) < 0 ) - pivot = mid; - else if ( compare(*start, *end) < 0 ) - pivot = end; - else - pivot = start; - } - else if ( compare(*start, *end) < 0 ) - pivot = start; - else if ( compare(*mid, *end) < 0 ) - pivot = end; - else - pivot = mid; - - return pivot; -} - -template <class T, class Compare> T *QuickSort<T,Compare>:: - partition(T *start, T *end) -{ - /* Use the median of start, middle, end as the pivot. First save - * it off then move the last element to the free spot. */ - char pcPivot[sizeof(T)]; - T *pivot = median(start, end); - - memcpy( pcPivot, pivot, sizeof(T) ); - if ( pivot != end ) - memcpy( pivot, end, sizeof(T) ); - - T *first = start-1; - T *last = end; - pivot = (T*) pcPivot; - - /* Shuffle element to the correct side of the pivot, ending - * up with the free spot where the pivot will go. */ - while ( true ) { - /* Throw one element ahead to the free spot at last. */ - while ( true ) { - first += 1; - if ( first == last ) - goto done; - if ( compare( *first, *pivot ) > 0 ) { - memcpy(last, first, sizeof(T)); - break; - } - } - - /* Throw one element back to the free spot at first. */ - while ( true ) { - last -= 1; - if ( last == first ) - goto done; - if ( compare( *last, *pivot ) < 0 ) { - memcpy(first, last, sizeof(T)); - break; - } - } - } -done: - /* Put the pivot into the middle spot for it. */ - memcpy( first, pivot, sizeof(T) ); - return first; -} - - -template< class T, class Compare> void QuickSort<T,Compare>:: - doSort(T *start, T *end) -{ - long len = end - start + 1; - if ( len > _QS_INSERTION_THRESH ) { - /* Use quicksort. */ - T *pivot = partition( start, end ); - doSort(start, pivot-1); - doSort(pivot+1, end); - } - else if ( len > 1 ) { - /* Array is small, use insertion sort. */ - InsertSort<T, Compare>::sort( start, len ); - } -} - -/** - * \brief Quick sort an array of data. - */ -template< class T, class Compare> - void QuickSort<T,Compare>::sort(T *data, long len) -{ - /* Call recursive worker. */ - doSort(data, data+len-1); -} - -#ifdef AAPL_NAMESPACE -} -#endif - -#endif /* _AAPL_QUICKSORT_H */ diff --git a/contrib/tools/ragel5/aapl/resize.h b/contrib/tools/ragel5/aapl/resize.h deleted file mode 100644 index 24edc16ed8..0000000000 --- a/contrib/tools/ragel5/aapl/resize.h +++ /dev/null @@ -1,344 +0,0 @@ -/* - * Copyright 2002 Adrian Thurston <thurston@cs.queensu.ca> - */ - -/* This file is part of Aapl. - * - * Aapl is free software; you can redistribute it and/or modify it under the - * terms of the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * Aapl 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 Aapl; if not, write to the Free Software Foundation, Inc., 59 - * Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef _AAPL_RESIZE_H -#define _AAPL_RESIZE_H - -#include <assert.h> - -#ifdef AAPL_NAMESPACE -namespace Aapl { -#endif - -/* This step is expressed in units of T. Changing this requires changes to - * docs in ResizeLin constructor. */ -#define LIN_DEFAULT_STEP 256 - -/* - * Resizing macros giving different resize methods. - */ - -/* If needed is greater than existing, give twice needed. */ -#define EXPN_UP( existing, needed ) \ - needed > existing ? (needed<<1) : existing - -/* If needed is less than 1 quarter existing, give twice needed. */ -#define EXPN_DOWN( existing, needed ) \ - needed < (existing>>2) ? (needed<<1) : existing - -/* If needed is greater than existing, give needed plus step. */ -#define LIN_UP( existing, needed ) \ - needed > existing ? (needed+step) : existing - -/* If needed is less than existing - 2 * step then give needed plus step. */ -#define LIN_DOWN( existing, needed ) \ - needed < (existing-(step<<1)) ? (needed+step) : existing - -/* Return existing. */ -#define CONST_UP( existing, needed ) existing - -/* Return existing. */ -#define CONST_DOWN( existing, needed ) existing - -/** - * \addtogroup vector - * @{ - */ - -/** \class ResizeLin - * \brief Linear table resizer. - * - * When an up resize or a down resize is needed, ResizeLin allocates the space - * needed plus some user defined step. The result is that when growing the - * vector in a linear fashion, the number of resizes is also linear. - * - * If only up resizing is done, then there will never be more than step unused - * spaces in the vector. If down resizing is done as well, there will never be - * more than 2*step unused spaces in the vector. The up resizing and down - * resizing policies are offset to improve performance when repeatedly - * inserting and removing a small number of elements relative to the step. - * This scheme guarantees that repetitive inserting and removing of a small - * number of elements will never result in repetative reallocation. - * - * The vectors pass sizes to the resizer in units of T, so the step gets - * interpreted as units of T. - */ - -/*@}*/ - -/* Linear resizing. */ -class ResizeLin -{ -protected: - /** - * \brief Default constructor. - * - * Intializes resize step to 256 units of the table type T. - */ - ResizeLin() : step(LIN_DEFAULT_STEP) { } - - /** - * \brief Determine the new table size when up resizing. - * - * If the existing size is insufficient for the space needed, then allocate - * the space needed plus the step. The step is in units of T. - */ - inline long upResize( long existing, long needed ) - { return LIN_UP(existing, needed); } - - /** - * \brief Determine the new table size when down resizing. - * - * If space needed is less than the existing - 2*step, then allocate the - * space needed space plus the step. The step is in units of T. - */ - inline long downResize( long existing, long needed ) - { return LIN_DOWN(existing, needed); } - -public: - /** - * \brief Step for linear resize. - * - * Amount of extra space in units of T added each time a resize must take - * place. This may be changed at any time. The step should be >= 0. - */ - long step; -}; - -/** - * \addtogroup vector - * @{ - */ - -/** \class ResizeCtLin - * \brief Linear table resizer with compile time step. - * - * When an up resize or a down resize is needed, ResizeCtLin allocates the - * space needed plus some compile time defined step. The result is that when - * growing the vector in a linear fashion, the number of resizes is also - * linear. - * - * If only up resizing is done, then there will never be more than step unused - * spaces in the vector. If down resizing is done as well, there will never be - * more than 2*step unused spaces in the vector. The up resizing and down - * resizing policies are offset to improve performance when repeatedly - * inserting and removing a small number of elements relative to the step. - * This scheme guarantees that repetitive inserting and removing of a small - * number of elements will never result in repetative reallocation. - * - * The vectors pass sizes to the resizer in units of T, so the step gets - * interpreted as units of T. - */ - -/*@}*/ - -/* Linear resizing. */ -template <long step> class ResizeCtLin -{ -protected: - /** - * \brief Determine the new table size when up resizing. - * - * If the existing size is insufficient for the space needed, then allocate - * the space needed plus the step. The step is in units of T. - */ - inline long upResize( long existing, long needed ) - { return LIN_UP(existing, needed); } - - /** - * \brief Determine the new table size when down resizing. - * - * If space needed is less than the existing - 2*step, then allocate the - * space needed space plus the step. The step is in units of T. - */ - inline long downResize( long existing, long needed ) - { return LIN_DOWN(existing, needed); } -}; - -/** - * \addtogroup vector - * @{ - */ - -/** \class ResizeConst - * \brief Constant table resizer. - * - * When an up resize is needed the existing size is always used. ResizeConst - * does not allow dynamic resizing. To use ResizeConst, the vector needs to be - * constructed with and initial allocation amount otherwise it will be - * unusable. - */ - -/*@}*/ - -/* Constant table resizing. */ -class ResizeConst -{ -protected: - /* Assert don't need more than exists. Return existing. */ - static inline long upResize( long existing, long needed ); - - /** - * \brief Determine the new table size when down resizing. - * - * Always returns the existing table size. - */ - static inline long downResize( long existing, long needed ) - { return CONST_DOWN(existing, needed); } -}; - -/** - * \brief Determine the new table size when up resizing. - * - * If the existing size is insufficient for the space needed, then an assertion - * will fail. Otherwise returns the existing size. - */ -inline long ResizeConst::upResize( long existing, long needed ) -{ - assert( needed <= existing ); - return CONST_UP(existing, needed); -} - -/** - * \addtogroup vector - * @{ - */ - -/** \class ResizeRunTime - * \brief Run time settable table resizer. - * - * ResizeRunTime can have it's up and down resizing policies set at run time. - * Both up and down policies can be set independently to one of Exponential, - * Linear, or Constant. See the documentation for ResizeExpn, ResizeLin, and - * ResizeConst for the details of the resizing policies. - * - * The policies may be changed at any time. The default policies are - * both Exponential. - */ - -/*@}*/ - -/* Run time resizing. */ -class ResizeRunTime -{ -protected: - /** - * \brief Default constuctor. - * - * The up and down resizing it initialized to Exponetial. The step - * defaults to 256 units of T. - */ - inline ResizeRunTime(); - - /** - * \brief Resizing policies. - */ - enum ResizeType { - Exponential, /*!< Exponential resizing. */ - Linear, /*!< Linear resizing. */ - Constant /*!< Constant table size. */ - }; - - inline long upResize( long existing, long needed ); - inline long downResize( long existing, long needed ); - -public: - /** - * \brief Step for linear resize. - * - * Amount of extra space in units of T added each time a resize must take - * place. This may be changed at any time. The step should be >= 0. - */ - long step; - - /** - * \brief Up resizing policy. - */ - ResizeType upResizeType; - - /** - * \brief Down resizing policy. - */ - ResizeType downResizeType; -}; - -inline ResizeRunTime::ResizeRunTime() -: - step( LIN_DEFAULT_STEP ), - upResizeType( Exponential ), - downResizeType( Exponential ) -{ -} - -/** - * \brief Determine the new table size when up resizing. - * - * Type of up resizing is determined by upResizeType. Exponential, Linear and - * Constant resizing is the same as that of ResizeExpn, ResizeLin and - * ResizeConst. - */ -inline long ResizeRunTime::upResize( long existing, long needed ) -{ - switch ( upResizeType ) { - case Exponential: - return EXPN_UP(existing, needed); - case Linear: - return LIN_UP(existing, needed); - case Constant: - assert( needed <= existing ); - return CONST_UP(existing, needed); - } - return 0; -}; - -/** - * \brief Determine the new table size when down resizing. - * - * Type of down resizing is determined by downResiizeType. Exponential, Linear - * and Constant resizing is the same as that of ResizeExpn, ResizeLin and - * ResizeConst. - */ -inline long ResizeRunTime::downResize( long existing, long needed ) -{ - switch ( downResizeType ) { - case Exponential: - return EXPN_DOWN(existing, needed); - case Linear: - return LIN_DOWN(existing, needed); - case Constant: - return CONST_DOWN(existing, needed); - } - return 0; -} - -/* Don't need these anymore. */ -#undef EXPN_UP -#undef EXPN_DOWN -#undef LIN_UP -#undef LIN_DOWN -#undef CONST_UP -#undef CONST_DOWN - -#ifdef AAPL_NAMESPACE -} -#endif - -#endif /* _AAPL_RESIZE_H */ |