////////////////////////////////////////////////////////////////////////////////
//                            MESH_SFIndirectEdge.inl                         //
////////////////////////////////////////////////////////////////////////////////

namespace X3DTK {
namespace MESH {

template<class MData, class VData, class EData, class FData, bool RW>
SFTemplateIndirectEdge<MData, VData, EData, FData, RW>::SFTemplateIndirectEdge(SFTemplateEdgeContent<MData, VData, EData, FData, RW> *const edgeContent)
: SFTemplateEdge<MData, VData, EData, FData, RW>(edgeContent)
{
}

template<class MData, class VData, class EData, class FData, bool RW>  
SFTemplateIndirectEdge<MData, VData, EData, FData, RW>::~SFTemplateIndirectEdge() 
{
}

template<class MData, class VData, class EData, class FData, bool RW>
SFTemplateVertex<MData, VData, EData, FData, RW> *SFTemplateIndirectEdge<MData, VData, EData, FData, RW>::getFromVertex() const 
{
  return SFTemplateIndirectEdge<MData, VData, EData, FData, RW>::_edgeContent->getToVertex();
}

template<class MData, class VData, class EData, class FData, bool RW>
SFTemplateVertex<MData, VData, EData, FData, RW> *SFTemplateIndirectEdge<MData, VData, EData, FData, RW>::getToVertex() const 
{
  return SFTemplateIndirectEdge<MData, VData, EData, FData, RW>::_edgeContent->getFromVertex();
}

template<class MData, class VData, class EData, class FData, bool RW>
const typename SFTemplateIndirectEdge<MData, VData, EData, FData, RW>::MFFace &SFTemplateIndirectEdge<MData, VData, EData, FData, RW>::getLeftFaces() const 
{
  return SFTemplateIndirectEdge<MData, VData, EData, FData, RW>::_edgeContent->get2Faces();
}

template<class MData, class VData, class EData, class FData, bool RW>
const typename SFTemplateIndirectEdge<MData, VData, EData, FData, RW>::MFFace &SFTemplateIndirectEdge<MData, VData, EData, FData, RW>::getRightFaces() const 
{
  return SFTemplateIndirectEdge<MData, VData, EData, FData, RW>::_edgeContent->get1Faces();
}

template<class MData, class VData, class EData, class FData, bool RW>
void SFTemplateIndirectEdge<MData, VData, EData, FData, RW>::addLeftFace(SFTemplateFace<MData, VData, EData, FData, RW> *face) 
{
  SFTemplateIndirectEdge<MData, VData, EData, FData, RW>::_edgeContent->add2Face(face);    
}

template<class MData, class VData, class EData, class FData, bool RW>
void SFTemplateIndirectEdge<MData, VData, EData, FData, RW>::addRightFace(SFTemplateFace<MData, VData, EData, FData, RW> *face) 
{
  SFTemplateIndirectEdge<MData, VData, EData, FData, RW>::_edgeContent->add1Face(face);    
}

template<class MData, class VData, class EData, class FData, bool RW>
void SFTemplateIndirectEdge<MData, VData, EData, FData, RW>::removeLeftFace(SFTemplateFace<MData, VData, EData, FData, RW> *face) 
{
  SFTemplateIndirectEdge<MData, VData, EData, FData, RW>::_edgeContent->remove2Face(face);
}

template<class MData, class VData, class EData, class FData, bool RW>
void SFTemplateIndirectEdge<MData, VData, EData, FData, RW>::removeRightFace(SFTemplateFace<MData, VData, EData, FData, RW> *face) 
{
  SFTemplateIndirectEdge<MData, VData, EData, FData, RW>::_edgeContent->remove1Face(face);
}

}
}
