src/share/vm/memory/binaryTreeDictionary.hpp
Print this page
*** 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;