src/share/vm/memory/binaryTreeDictionary.hpp

Print this page
rev 5878 : 8034171: Remove use of template template parameters from binaryTreeDictionary.
Contributed-by: Matthias.Baesken@sap.com

*** 35,56 **** */ // A TreeList is a FreeList which can be used to maintain a // binary tree of free lists. ! template <class Chunk_t, template <class> class FreeList_t> class TreeChunk; ! template <class Chunk_t, template <class> class FreeList_t> class BinaryTreeDictionary; ! template <class Chunk_t, template <class> class FreeList_t> class AscendTreeCensusClosure; ! template <class Chunk_t, template <class> class FreeList_t> class DescendTreeCensusClosure; ! template <class Chunk_t, template <class> class FreeList_t> class DescendTreeSearchClosure; class FreeChunk; template <class> class AdaptiveFreeList; ! typedef BinaryTreeDictionary<FreeChunk, AdaptiveFreeList> AFLBinaryTreeDictionary; ! template <class Chunk_t, template <class> class FreeList_t> ! class TreeList : public FreeList_t<Chunk_t> { friend class TreeChunk<Chunk_t, FreeList_t>; friend class BinaryTreeDictionary<Chunk_t, FreeList_t>; friend class AscendTreeCensusClosure<Chunk_t, FreeList_t>; friend class DescendTreeCensusClosure<Chunk_t, FreeList_t>; friend class DescendTreeSearchClosure<Chunk_t, FreeList_t>; --- 35,56 ---- */ // A TreeList is a FreeList which can be used to maintain a // binary tree of free lists. ! template <class Chunk_t, class FreeList_t> class TreeChunk; ! template <class Chunk_t, class FreeList_t> class BinaryTreeDictionary; ! template <class Chunk_t, class FreeList_t> class AscendTreeCensusClosure; ! template <class Chunk_t, class FreeList_t> class DescendTreeCensusClosure; ! template <class Chunk_t, class FreeList_t> class DescendTreeSearchClosure; class FreeChunk; template <class> class AdaptiveFreeList; ! typedef BinaryTreeDictionary<FreeChunk, AdaptiveFreeList<FreeChunk> > AFLBinaryTreeDictionary; ! template <class Chunk_t, class FreeList_t> ! class TreeList : public FreeList_t { friend class TreeChunk<Chunk_t, FreeList_t>; friend class BinaryTreeDictionary<Chunk_t, FreeList_t>; friend class AscendTreeCensusClosure<Chunk_t, FreeList_t>; friend class DescendTreeCensusClosure<Chunk_t, FreeList_t>; friend class DescendTreeSearchClosure<Chunk_t, FreeList_t>;
*** 64,79 **** TreeList<Chunk_t, FreeList_t>* parent() const { return _parent; } TreeList<Chunk_t, FreeList_t>* left() const { return _left; } TreeList<Chunk_t, FreeList_t>* right() const { return _right; } // Wrapper on call to base class, to get the template to compile. ! Chunk_t* head() const { return FreeList_t<Chunk_t>::head(); } ! Chunk_t* tail() const { return FreeList_t<Chunk_t>::tail(); } ! void set_head(Chunk_t* head) { FreeList_t<Chunk_t>::set_head(head); } ! void set_tail(Chunk_t* tail) { FreeList_t<Chunk_t>::set_tail(tail); } ! size_t size() const { return FreeList_t<Chunk_t>::size(); } // Accessors for links in tree. void set_left(TreeList<Chunk_t, FreeList_t>* tl) { _left = tl; --- 64,79 ---- TreeList<Chunk_t, FreeList_t>* parent() const { return _parent; } TreeList<Chunk_t, FreeList_t>* left() const { return _left; } TreeList<Chunk_t, FreeList_t>* right() const { return _right; } // Wrapper on call to base class, to get the template to compile. ! Chunk_t* head() const { return FreeList_t::head(); } ! Chunk_t* tail() const { return FreeList_t::tail(); } ! void set_head(Chunk_t* head) { FreeList_t::set_head(head); } ! void set_tail(Chunk_t* tail) { FreeList_t::set_tail(tail); } ! size_t size() const { return FreeList_t::size(); } // Accessors for links in tree. void set_left(TreeList<Chunk_t, FreeList_t>* tl) { _left = tl;
*** 88,98 **** void set_parent(TreeList<Chunk_t, FreeList_t>* tl) { _parent = tl; } void clear_left() { _left = NULL; } void clear_right() { _right = NULL; } void clear_parent() { _parent = NULL; } ! void initialize() { clear_left(); clear_right(), clear_parent(); FreeList_t<Chunk_t>::initialize(); } // For constructing a TreeList from a Tree chunk or // address and size. TreeList(); static TreeList<Chunk_t, FreeList_t>* --- 88,98 ---- void set_parent(TreeList<Chunk_t, FreeList_t>* tl) { _parent = tl; } void clear_left() { _left = NULL; } void clear_right() { _right = NULL; } void clear_parent() { _parent = NULL; } ! void initialize() { clear_left(); clear_right(), clear_parent(); FreeList_t::initialize(); } // For constructing a TreeList from a Tree chunk or // address and size. TreeList(); static TreeList<Chunk_t, FreeList_t>*
*** 137,147 **** // the first chunk in the list is distinguished in this fashion // (also is the node in the tree), it is the last chunk to be found // on the free list for a node in the tree and is only removed if // it is the last chunk on the free list. ! template <class Chunk_t, template <class> class FreeList_t> class TreeChunk : public Chunk_t { friend class TreeList<Chunk_t, FreeList_t>; TreeList<Chunk_t, FreeList_t>* _list; TreeList<Chunk_t, FreeList_t> _embedded_list; // if non-null, this chunk is on _list --- 137,147 ---- // the first chunk in the list is distinguished in this fashion // (also is the node in the tree), it is the last chunk to be found // on the free list for a node in the tree and is only removed if // it is the last chunk on the free list. ! template <class Chunk_t, class FreeList_t> class TreeChunk : public Chunk_t { friend class TreeList<Chunk_t, FreeList_t>; TreeList<Chunk_t, FreeList_t>* _list; TreeList<Chunk_t, FreeList_t> _embedded_list; // if non-null, this chunk is on _list
*** 171,181 **** void verify_tree_chunk_list() const; void assert_is_mangled() const; }; ! template <class Chunk_t, template <class> class FreeList_t> class BinaryTreeDictionary: public FreeBlockDictionary<Chunk_t> { friend class VMStructs; size_t _total_size; size_t _total_free_blocks; TreeList<Chunk_t, FreeList_t>* _root; --- 171,181 ---- void verify_tree_chunk_list() const; void assert_is_mangled() const; }; ! template <class Chunk_t, class FreeList_t> class BinaryTreeDictionary: public FreeBlockDictionary<Chunk_t> { friend class VMStructs; size_t _total_size; size_t _total_free_blocks; TreeList<Chunk_t, FreeList_t>* _root;