// This file is part of libigl, a simple c++ geometry processing library.
//
// Copyright (C) 2013 Alec Jacobson <alecjacobson@gmail.com>
//
// This Source Code Form is subject to the terms of the Mozilla Public License
// v. 2.0. If a copy of the MPL was not distributed with this file, You can
// obtain one at http://mozilla.org/MPL/2.0/.
#include "write_triangle_mesh.h"

#include "writeOBJ.h"
#include "writeOFF.h"

#include <iostream>

template <typename DerivedV, typename DerivedF>
IGL_INLINE bool igl::write_triangle_mesh(
  const std::string str,
  const Eigen::PlainObjectBase<DerivedV>& V,
  const Eigen::PlainObjectBase<DerivedF>& F)
{
  using namespace std;
  const char* p;
  for (p = str.c_str(); *p != '\0'; p++)
    ;
  while (*p != '.')
    p--;

  if (!strcmp(p, ".obj") || !strcmp(p, ".OBJ"))
    return igl::writeOBJ(str,V,F);

  if (!strcmp(p, ".off") || !strcmp(p, ".OFF"))
    return igl::writeOFF(str,V,F);

  cerr<<"^write Unsupported extension: "<<string(p)<<endl;
  return false;
}

#ifdef IGL_STATIC_LIBRARY
// Explicit template specialization
// generated by autoexplicit.sh
template bool igl::write_triangle_mesh<Eigen::Matrix<double, -1, -1, 0, -1, -1>, Eigen::Matrix<int, -1, -1, 0, -1, -1> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> >, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, -1, 0, -1, -1> > const&, Eigen::PlainObjectBase<Eigen::Matrix<int, -1, -1, 0, -1, -1> > const&);
#endif
