// gen_LevelSet - An automatic generator of meshes from level-sets
// Copyright (C) 2012-2026 Eric Bechet, Frederic Duboeuf
//
// See the LICENSE file for license information.
// Please report all bugs and problems to <bechet@cadxfem.org> or <duboeuf@outlook.com>.


#ifndef _GENDATALS_H_
#define _GENDATALS_H_

#include "genDataIO.h"

#define TOL 1e-6

class genLevelSetSupport : public genSupport
{
public :
  std::string kind; // file, analytical, etc...
  std::string LSfileName;
  genSimpleFunction<genTensor0<double> >* fscalar;
  std::map<int,std::vector<genScalar<genTensor0<double> > > >* distances; // ordre donné par groupOfElement, vect des distances des noeuds de l element
  int meshContainsLS;
public :
  genLevelSetSupport() : genSupport() {}
  genGroupOfElements* group();
  friend std::istream & operator>>(std::istream &is, genLevelSetSupport &obj);
  friend std::ostream & operator<<(std::ostream &os, const genLevelSetSupport &obj);
};

std::istream & operator>>(std::istream &is, genLevelSetSupport &obj);
std::ostream & operator<<(std::ostream &os, const genLevelSetSupport &obj);


class genDataLS : public genDataIO
{
public:
  std::vector<genLevelSetSupport*> LSs;
public:
  genDataLS() : genDataIO() {}
  virtual ~genDataLS() { for (int i=0; i<LSs.size(); ++i) delete LSs[i]; }
  virtual void readToken(std::istream &is, std::string &token);
  virtual void dumpContent(std::ostream &os);
};

void writeLSs(std::vector<genLevelSetSupport*> &LSs, const std::string &baseName);
void writeLS(std::ostream &os, genLevelSetSupport* LS, int LSNum);

#endif //_GENDATALS_H_