/** \file
 * \brief Attributes Table Flat API.
 * This will simplify the DLL export, and can be used for C aplications.
 *
 * See Copyright Notice in im_lib.d
 */

module im.attrib_flat;

extern (C) @safe nothrow:

struct imAttribTablePrivate;

/** Definition of the callback used in ForEach function. */
alias imAttribTableCallback = int function(void* user_data, int index, const(char) * name, int data_type, int count, const(void) * data);

imAttribTablePrivate* imAttribTableCreate(int hash_size);
void imAttribTableDestroy(imAttribTablePrivate* ptable);
int imAttribTableCount(imAttribTablePrivate* ptable);
void imAttribTableRemoveAll(imAttribTablePrivate* ptable);
const(void) * imAttribTableGet(const(imAttribTablePrivate) * ptable, const(char) *name, int *data_type, int *count);
int imAttribTableGetInteger(imAttribTablePrivate* ptable, const(char) *name, int index);
double imAttribTableGetReal(imAttribTablePrivate* ptable, const(char) *name, int index);
const(char) * imAttribTableGetString(imAttribTablePrivate* ptable, const(char) *name);
void imAttribTableSet(imAttribTablePrivate* ptable, const(char) * name, int data_type, int count, const(void) * data);
void imAttribTableSetInteger(imAttribTablePrivate* ptable, const(char) * name, int data_type, int value);
void imAttribTableSetReal(imAttribTablePrivate* ptable, const(char) * name, int data_type, double value);
void imAttribTableSetString(imAttribTablePrivate* ptable, const(char) * name, const(char) * value);
void imAttribTableUnSet(imAttribTablePrivate* ptable, const(char) *name);
void imAttribTableCopyFrom(imAttribTablePrivate* ptable_dst, const(imAttribTablePrivate) * ptable_src);
void imAttribTableMergeFrom(imAttribTablePrivate* ptable_dst, const(imAttribTablePrivate) * ptable_src);
void imAttribTableForEach(const(imAttribTablePrivate) * ptable, void* user_data, imAttribTableCallback attrib_func);

imAttribTablePrivate* imAttribArrayCreate(int hash_size);
const(void) * imAttribArrayGet(const(imAttribTablePrivate) * ptable, int index, char *name, int *data_type, int *count);
void imAttribArraySet(imAttribTablePrivate* ptable, int index, const(char) * name, int data_type, int count, const(void) * data);
void imAttribArrayCopyFrom(imAttribTablePrivate* ptable_dst, const(imAttribTablePrivate) * ptable_src);