IM: im_attrib.h Source File
From IM - An Imaging Tool
im_attrib.h
Go to the documentation of this file.00001 /** \file 00002 * \brief Attributes Table. 00003 * 00004 * See Copyright Notice in im_lib.h 00005 */ 00006 00007 #ifndef __IM_ATTRIB_H_ 00008 #define __IM_ATTRIB_H_ 00009 00010 #include "im_attrib_flat.h" 00011 00012 /** \brief Attributes Table. 00013 * 00014 * \par 00015 * All the attributes have a name, a type, a count and the data.\n 00016 * Names are usually strings with less that 30 chars. 00017 * \par 00018 * Attributes are stored in a hash table for fast access. \n 00019 * We use the hash function described in "The Pratice of Programming" of Kernighan & Pike. 00020 * \ingroup util */ 00021 class imAttribTable 00022 { 00023 imAttribTablePrivate* ptable; 00024 public: 00025 00026 /** Creates an empty table. 00027 * If size is zero the default size of 101 is used. Size must be a prime number. 00028 * Other common values are 67, 599 and 1499.*/ 00029 imAttribTable(int hash_size) 00030 { ptable = imAttribTableCreate(hash_size); } 00031 00032 /** Destroys the table and all the attributes. */ 00033 ~imAttribTable() 00034 { imAttribTableDestroy(ptable); ptable = 0; } 00035 00036 /** Returns the number of elements in the table. */ 00037 int Count() const 00038 { return imAttribTableCount(ptable); } 00039 00040 /** Removes all the attributes in the table */ 00041 void RemoveAll() 00042 { imAttribTableRemoveAll(ptable); } 00043 00044 /** Copies the contents of the given table into this table. */ 00045 void CopyFrom(const imAttribTable& table) 00046 { imAttribTableCopyFrom(ptable, table.ptable); } 00047 00048 /** Inserts an attribute into the table. \n 00049 * Data is duplicated if not NULL, else data is initialized with zeros. 00050 * See also \ref imDataType. */ 00051 void Set(const char* name, int data_type, int count, const void* data) 00052 { imAttribTableSet(ptable, name, data_type, count, data); } 00053 00054 /** Removes an attribute from the table given its name. */ 00055 void UnSet(const char *name) 00056 { imAttribTableUnSet(ptable, name); } 00057 00058 /** Finds an attribute in the table. 00059 * Returns the attribute if found, NULL otherwise. 00060 * See also \ref imDataType. */ 00061 const void* Get(const char *name, int *data_type = 0, int *count = 0) const 00062 { return imAttribTableGet(ptable, name, data_type, count); } 00063 00064 /** For each attribute calls the user callback. If the callback returns 0 the function returns. */ 00065 void ForEach(void* user_data, imAttribTableCallback attrib_func) const 00066 { imAttribTableForEach(ptable, user_data, attrib_func); } 00067 }; 00068 00069 /** \brief Attributes Table. 00070 * 00071 * \par 00072 * Same as \ref imAttribTable, but uses an array of fixed size. 00073 * \ingroup util */ 00074 class imAttribArray 00075 { 00076 imAttribTablePrivate* ptable; 00077 public: 00078 00079 /** Creates an empty array. */ 00080 imAttribArray(int count) 00081 { ptable = imAttribArrayCreate(count); } 00082 00083 /** Destroys the array and all the attributes. */ 00084 ~imAttribArray() 00085 { imAttribTableDestroy(ptable); ptable = 0; } 00086 00087 /** Returns the number of elements in the array. */ 00088 int Count() const 00089 { return imAttribTableCount(ptable); } 00090 00091 /** Removes all the attributes in the array */ 00092 void RemoveAll() 00093 { imAttribTableRemoveAll(ptable); } 00094 00095 /** Copies the contents of the given table into this table. */ 00096 void CopyFrom(const imAttribArray& table) 00097 { imAttribArrayCopyFrom(ptable, table.ptable); } 00098 00099 /** Inserts an attribute into the array. \n 00100 * Data is duplicated if not NULL, else data is initialized with zeros. 00101 * See also \ref imDataType. */ 00102 void Set(int index, const char* name, int data_type, int count, const void* data) 00103 { imAttribArraySet(ptable, index, name, data_type, count, data); } 00104 00105 /** Finds an attribute in the array. 00106 * Returns the attribute if found, NULL otherwise. 00107 * See also \ref imDataType. */ 00108 const void* Get(int index, char *name = 0, int *data_type = 0, int *count = 0) const 00109 { return imAttribArrayGet(ptable, index, name, data_type, count); } 00110 00111 /** For each attribute calls the user callback. If the callback returns 0 the function returns. */ 00112 void ForEach(void* user_data, imAttribTableCallback attrib_func) const 00113 { imAttribTableForEach(ptable, user_data, attrib_func); } 00114 }; 00115 00116 #endif