// ---------------------------------------------------------------------
// $Id: tria_accessor.inst.in 30049 2013-07-18 19:42:40Z maier $
//
// Copyright (C) 1998 - 2013 by the deal.II authors
//
// This file is part of the deal.II library.
//
// The deal.II library is free software; you can use it, 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.
// The full text of the license can be found in the file LICENSE at
// the top level of the deal.II distribution.
//
// ---------------------------------------------------------------------



for (deal_II_dimension : DIMENSIONS)
  {
// Remark: The explicit instantiations for "TriaAccessor" were moved
// to the top of this source file. The reason is a slightly buggy version
// of the Apple gcc v.3.3.
// For more information, see http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24331
    template class TriaAccessorBase<1,deal_II_dimension>;
#if deal_II_dimension >= 2
    template class TriaAccessorBase<2,deal_II_dimension>;
#endif
#if deal_II_dimension >= 3
    template class TriaAccessorBase<3,deal_II_dimension>;
#endif

    template class TriaAccessor<1,deal_II_dimension,deal_II_dimension>;
#if deal_II_dimension >= 2
    template class TriaAccessor<2,deal_II_dimension,deal_II_dimension>;
#endif
#if deal_II_dimension >= 3
    template class TriaAccessor<3,deal_II_dimension,deal_II_dimension>;
#endif


    template class CellAccessor<deal_II_dimension>;
    template class TriaRawIterator<TriaAccessor<1, deal_II_dimension, deal_II_dimension> >;
    template class TriaRawIterator<CellAccessor<deal_II_dimension> >;
    template class TriaIterator<TriaAccessor<1, deal_II_dimension, deal_II_dimension> >;
    template class TriaIterator<CellAccessor<deal_II_dimension> >;
    template class TriaActiveIterator<TriaAccessor<1, deal_II_dimension, deal_II_dimension> >;
    template class TriaActiveIterator<CellAccessor<deal_II_dimension> >;


#if deal_II_dimension >= 2
    template class TriaRawIterator<TriaAccessor<2, deal_II_dimension, deal_II_dimension> >;
    template class TriaIterator<TriaAccessor<2, deal_II_dimension, deal_II_dimension> >;
    template class TriaActiveIterator<TriaAccessor<2, deal_II_dimension, deal_II_dimension> >;
#endif

#if deal_II_dimension >= 3
    template class TriaRawIterator<TriaAccessor<3, deal_II_dimension, deal_II_dimension> >;
    template class TriaIterator<TriaAccessor<3, deal_II_dimension, deal_II_dimension> >;
    template class TriaActiveIterator<TriaAccessor<3, deal_II_dimension, deal_II_dimension> >;
    template class CellAccessor<1, 3>;
#endif

#if deal_II_dimension == 1
    template class TriaAccessorBase<1,deal_II_dimension,2>;
    template class TriaAccessorBase<1,deal_II_dimension,3>;

    template class TriaAccessor<1,deal_II_dimension,2>;
    template class TriaAccessor<1,deal_II_dimension,3>;
    

#endif
#if deal_II_dimension == 2
    template class TriaAccessorBase<1,deal_II_dimension,3>;
    template class TriaAccessorBase<2,deal_II_dimension,3>;

    template class TriaAccessor<1,deal_II_dimension,3>;
    template class TriaAccessor<2,deal_II_dimension,3>;
#endif

#if deal_II_dimension != 3
    template class CellAccessor<deal_II_dimension, deal_II_dimension+1>;
    template class TriaRawIterator<TriaAccessor<1, deal_II_dimension, deal_II_dimension+1> >;
    template class TriaRawIterator<CellAccessor<deal_II_dimension, deal_II_dimension+1> >;
    template class TriaIterator<TriaAccessor<1, deal_II_dimension, deal_II_dimension+1> >;
    template class TriaIterator<CellAccessor<deal_II_dimension, deal_II_dimension+1> >;
    template class TriaActiveIterator<TriaAccessor<1, deal_II_dimension, deal_II_dimension+1> >;
    template class TriaActiveIterator<CellAccessor<deal_II_dimension, deal_II_dimension+1> >;


#if deal_II_dimension == 2
    template class TriaRawIterator<TriaAccessor<2, deal_II_dimension, deal_II_dimension+1> >;
    template class TriaIterator<TriaAccessor<2, deal_II_dimension, deal_II_dimension+1> >;
    template class TriaActiveIterator<TriaAccessor<2, deal_II_dimension, deal_II_dimension+1> >;
#endif

#endif
  }

    
