#ifndef IDENTIFIABLE_H
#define IDENTIFIABLE_H

// gets incremented for each object
int idpool = 1;

// lookup table for type mapping,
// indices come from _*_IDX_ in types.h
static const char *package[] = {
	"Bio::PhyloXS::Forest::Node",
	"Bio::PhyloXS::Forest::Tree",
	"Bio::PhyloXS::Forest",
	"Bio::PhyloXS::Taxa::Taxon",
	"Bio::PhyloXS::Taxa",
	"Bio::PhyloXS::Matrices::Datum",
	"Bio::PhyloXS::Matrices::Matrix",
	"Bio::PhyloXS::Matrices::Character",
	"Bio::PhyloXS::Matrices::Characters",
	"Bio::PhyloXS::NeXML::Meta",
	"Bio::PhyloXS::Project",
	"Bio::PhyloXS::Set",
	"Bio::PhyloXS::Matrices::Datatype",
	"Bio::PhyloXS::Mediators::TaxaMediator"
};

typedef struct {
    int id; // from idpool
    int _type; // from defines
    int _container; // from defines
	int _index; // from defines
} Identifiable;

void initialize_identifiable(Identifiable* self);
void destroy_identifiable(Identifiable* self);

#endif