ADAPT / lib / include / ini.h
ini.h
Raw
#include <stddef.h>
#include <stdlib.h>

#ifndef INI_H
#define INI_H


#define INI_INIT_NUM_PROPERTIES 4
#define INI_INIT_NUM_SUBSECTIONS 4
#define INI_INIT_NUM_SECTIONS 4
enum INI_PROP_TYPE {INI_P_STR=0, INI_P_NUM, INI_P_INVALID };

struct ini_property
{
    char *key;
    enum INI_PROP_TYPE p_type;
    union
    {
	char *str;
	double num;
    }value;
};

void ini_str_property_init(struct ini_property *i_p, char *key,  char *str);
void ini_num_property_init(struct ini_property *i_p, char *key,  double num);
void ini_property_destroy(struct ini_property *i_p);



struct ini_subsection
{
    char *name;
    struct ini_property *properties;
    size_t num_properties;
    size_t max_properties;
};

void ini_subsection_init(struct  ini_subsection *i_ss, char *name);
void ini_subsection_add(struct ini_subsection *i_ss,
			struct ini_property *p);
void ini_subsection_destroy(struct ini_subsection *i_ss);

/*
  note how the section name and properties could
  literally be replaced by a subsection if we wanted to
*/

struct ini_section
{

    char *name;
    struct ini_property *properties;
    size_t num_properties;
    size_t max_properties;

    struct ini_subsection *subsections;
    size_t num_subsections;
    size_t max_subsections;
};

void ini_section_init(struct ini_section *i_s, char *name);
void ini_section_add_property(struct ini_section *i_s,
			      struct ini_property *p);
void ini_section_add_subsection(struct ini_section *i_s,
				struct ini_subsection *i_ss);
void ini_section_destroy(struct ini_section *i_s);
struct ini_subsection *ini_section_find_subsection(struct ini_section *i_s,
						   char *name);

struct ini 
{
    struct ini_property *global_props;
    size_t num_global_props;
    size_t max_global_props;

    struct ini_section *sections;
    size_t num_sections;
    size_t max_sections;

};
#endif

void ini_init(struct ini *ini);
void ini_add_property(struct ini *ini, struct ini_property *i_p);
void ini_add_section(struct ini *ini, struct ini_section *i_s);
void ini_destroy(struct ini *ini);
void ini_dump(struct ini *ini);
struct ini_section *ini_find_section(struct ini *ini, char *name);