GCFactory.h revision 5460a1f25d9ddecb5c70667267d66d51af177a99
15460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===- GCFactory.h --------------------------------------------------------===//
25460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
35460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//                     The MCLinker Project
45460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
55460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// This file is distributed under the University of Illinois Open Source
65460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao// License. See LICENSE.TXT for details.
75460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//
85460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao//===----------------------------------------------------------------------===//
95460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifndef MCLD_GC_FACTORY_H
105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#define MCLD_GC_FACTORY_H
115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#ifdef ENABLE_UNITTEST
125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <gtest.h>
135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "mcld/ADT/TypeTraits.h"
155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include "mcld/Support/Allocators.h"
165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <assert.h>
185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#include <iterator>
195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaonamespace mcld
215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class DataIteratorBase
245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *  \brief DataIteratorBase provides the basic functions of DataIterator
255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *  @see DataIterator
265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */
275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaotemplate<typename ChunkType>
285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaostruct DataIteratorBase
295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic:
315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ChunkType* m_pChunk;
325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  unsigned int m_Pos;
335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic:
355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  DataIteratorBase(ChunkType* X, unsigned int pPos)
365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  : m_pChunk(X), m_Pos(pPos)
375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { }
385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  inline void advance() {
405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    ++m_Pos;
415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    if ((m_Pos == m_pChunk->bound) && (0 == m_pChunk->next))
425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      return;
435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    if (m_Pos == m_pChunk->bound) {
445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      m_pChunk = m_pChunk->next;
455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      m_Pos = 0;
465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    }
475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool operator==(const DataIteratorBase& y) const
505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return ((this->m_pChunk == y.m_pChunk) && (this->m_Pos == y.m_Pos)); }
515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool operator!=(const DataIteratorBase& y) const
535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return ((this->m_pChunk != y.m_pChunk) || (this->m_Pos != y.m_Pos)); }
545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class DataIterator
575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *  \brief DataIterator provides STL compatible iterator for allocators
585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */
595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaotemplate<typename ChunkType, class Traits>
605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass DataIterator : public DataIteratorBase<ChunkType>
615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic:
635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef typename ChunkType::value_type  value_type;
645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef Traits                          traits;
655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef typename traits::pointer        pointer;
665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef typename traits::reference      reference;
675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef DataIterator<ChunkType, Traits> Self;
685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef DataIteratorBase<ChunkType>     Base;
695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef typename traits::nonconst_traits         nonconst_traits;
715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef DataIterator<ChunkType, nonconst_traits> iterator;
725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef typename traits::const_traits            const_traits;
735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef DataIterator<ChunkType, const_traits>    const_iterator;
745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef std::forward_iterator_tag                iterator_category;
755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef size_t                                   size_type;
765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef ptrdiff_t                                difference_type;
775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic:
795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  DataIterator()
805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  : Base(0, 0)
815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { }
825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  DataIterator(ChunkType* pChunk, unsigned int pPos)
845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  : Base(pChunk, pPos)
855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { }
865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  DataIterator(const DataIterator& pCopy)
885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  : Base(pCopy.m_pChunk, pCopy.m_Pos)
895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { }
905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  ~DataIterator()
925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { }
935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // -----  operators  ----- //
955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  reference operator*() {
965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    if (0 == this->m_pChunk)
975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      assert(0 && "data iterator goes to a invalid position");
985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return this->m_pChunk->data[Base::m_Pos];
995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
1005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  Self& operator++() {
1025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    this->Base::advance();
1035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return *this;
1045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
1055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  Self operator++(int) {
1075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    Self tmp = *this;
1085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    this->Base::advance();
1095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return tmp;
1105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
1115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
1125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaotemplate<typename Alloc>
1145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass GCFactoryBase : public Alloc
1155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
1165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic:
1175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef DataIterator<typename Alloc::chunk_type,
1185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                       NonConstTraits<
1195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                         typename Alloc::value_type> > iterator;
1205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef DataIterator<typename Alloc::chunk_type,
1215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                       ConstTraits<
1225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao                         typename Alloc::value_type> > const_iterator;
1235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef typename Alloc::value_type value_type;
1255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef typename Alloc::pointer    pointer;
1265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef typename Alloc::reference  reference;
1275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  typedef typename Alloc::size_type  size_type;
1285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprotected:
1305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  GCFactoryBase()
1315460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  : Alloc(), m_NumAllocData(0)
1325460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { }
1335460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1345460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  GCFactoryBase(size_t pNum)
1355460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  : Alloc(pNum), m_NumAllocData(0)
1365460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { }
1375460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1385460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic:
1395460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  virtual ~GCFactoryBase()
1405460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { Alloc::clear(); }
1415460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1425460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // -----  modifiers  ----- //
1435460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  value_type* allocate(size_t N) {
1445460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    value_type* result = Alloc::allocate(N);
1455460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    if (0 != result)
1465460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      m_NumAllocData += N;
1475460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return result;
1485460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
1495460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1505460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  value_type* allocate() {
1515460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    ++m_NumAllocData;
1525460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return Alloc::allocate();
1535460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
1545460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1555460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  void deallocate(pointer &pPtr, size_type N) {
1565460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    Alloc::deallocate(pPtr, N);
1575460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    if (0 == pPtr)
1585460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      m_NumAllocData -= N;
1595460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
1605460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1615460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  void deallocate(pointer &pPtr) {
1625460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    Alloc::deallocate(pPtr);
1635460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    if (0 == pPtr)
1645460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao      --m_NumAllocData;
1655460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
1665460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1675460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  void reset() {
1685460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    Alloc::reset();
1695460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    m_NumAllocData = 0;
1705460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
1715460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1725460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // -----  iterators  ----- //
1735460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  iterator begin()
1745460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return iterator(Alloc::m_pRoot, 0); }
1755460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1765460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const_iterator begin() const
1775460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return const_iterator(Alloc::m_pRoot, 0); }
1785460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1795460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  iterator end() {
1805460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return (0 == Alloc::m_pCurrent)?
1815460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao             begin():
1825460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao             iterator(Alloc::m_pCurrent, Alloc::m_pCurrent->bound);
1835460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
1845460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1855460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  const_iterator end() const {
1865460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao    return (0 == Alloc::m_pCurrent)?
1875460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao             begin():
1885460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao             const_iterator(Alloc::m_pCurrent, Alloc::m_pCurrent->bound);
1895460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  }
1905460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1915460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  // -----  observers  ----- //
1925460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  bool empty() const
1935460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return Alloc::empty(); }
1945460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1955460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  unsigned int capacity() const
1965460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return Alloc::max_size(); }
1975460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
1985460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  unsigned int size() const
1995460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { return m_NumAllocData; }
2005460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2015460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoprotected:
2025460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  unsigned int m_NumAllocData;
2035460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
2045460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2055460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao/** \class GCFactory
2065460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *  \brief GCFactory provides a factory that guaratees to remove all allocated
2075460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao *  data.
2085460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao */
2095460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaotemplate<typename DataType, size_t ChunkSize>
2105460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass GCFactory : public GCFactoryBase<LinearAllocator<DataType, ChunkSize> >
2115460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
2125460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic:
2135460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  GCFactory()
2145460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  : GCFactoryBase<LinearAllocator<DataType, ChunkSize> >()
2155460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { }
2165460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
2175460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2185460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaotemplate<typename DataType>
2195460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaoclass GCFactory<DataType, 0> : public GCFactoryBase<LinearAllocator<DataType, 0> >
2205460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao{
2215460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liaopublic:
2225460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  GCFactory(size_t pNum)
2235460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  : GCFactoryBase<LinearAllocator<DataType, 0> >(pNum)
2245460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao  { }
2255460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao};
2265460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2275460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao} // namespace of mcld
2285460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
2295460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao#endif
2305460a1f25d9ddecb5c70667267d66d51af177a99Shih-wei Liao
231