#define IMMAGINE_MOL_M_END           "M  END"
#define IMMAGINE_MOL_M_CHG           "M  CHG" 
#define IMMAGINE_MOL_MOD_IDENTIFIER  'M'
#define IMMAGINE_MOL_CHG_MAX_NUMBER  8

/**
 *Questa classe  rappresenta un'immagine in  memoria il cui input  e' un
 *file cml1.0
 */

class immagine_mol : public immagine {

public:

  /**
   *Costruttore di default
   */

  immagine_mol();


  /**
   *Costruttore di copia
   */

  immagine_mol(const immagine_mol& altra);

  /**
   *Costruisce, l'oggetto parsando il file passato come argomento.
   */

  immagine_mol(string path);

  virtual ~immagine_mol();


  /**
   *carica in memoria il file di input
   */
  virtual void filebist(string path);

  /**
   *Avvia il parsing
   */
  virtual void start();

  void start_from_string(std::string mol);

protected:

  /*
    
  bool _has_error;
  unsigned int _punt_mol;

  vector <string> _error;
  vector <string> _warning;

   */

  void parse_file_mol();
  void skip_header_lines();

  void connection_table(gruppo& the_group);
  void atoms_number();
  void atom_block(gruppo& the_group);
  float coordinate();
  std::string periodic_table_entry();
  
  void bond_block(gruppo& the_group);
  int  node_entry();
  void bond_order();



  void m_charge(gruppo& the_group);

  void skip_junk_from_line();

  int numeric_entry_int();
  int numeric_entry_float();

  
  /**
   *The total number of atoms in atom block
   */
  int _atoms_number;

};
