From: Andre Noll Date: Tue, 3 Jun 2008 10:31:14 +0000 (+0200) Subject: Move documentation of exported osl functions from osl.c to osl.h.in. X-Git-Tag: v0.1.0~89 X-Git-Url: http://git.tuebingen.mpg.de/?p=osl.git;a=commitdiff_plain;h=1106c6859585063b4ecca34e8fec7d0f3c65ef40 Move documentation of exported osl functions from osl.c to osl.h.in. It's better to have this information in osl.h as this is the file which is visible to the users. --- diff --git a/osl.c b/osl.c index f751302..c0e70cf 100644 --- a/osl.c +++ b/osl.c @@ -282,16 +282,6 @@ static int verify_name(const char *name) return 1; } -/** - * Compare two osl objects pointing to hash values. - * - * \param obj1 Pointer to the first hash object. - * \param obj2 Pointer to the second hash object. - * - * \return The values required for an osl compare function. - * - * \sa osl_compare_func, uint32_compare(). - */ int osl_hash_compare(const struct osl_object *obj1, const struct osl_object *obj2) { return hash_compare((HASH_TYPE *)obj1->data, (HASH_TYPE *)obj2->data); @@ -669,13 +659,6 @@ static int create_table_index(struct osl_table *t) return ret; } -/** - * Create a new osl table. - * - * \param desc Pointer to the table description. - * - * \return Standard. - */ __export int osl_create_table(const struct osl_table_description *desc) { const struct osl_column_description *cd; @@ -1111,20 +1094,6 @@ void clear_rbtrees(struct osl_table *t) } -/** - * Close an osl table. - * - * \param t Pointer to the table to be closed. - * \param flags Options for what should be cleaned up. - * - * If osl_open_table() succeeds, the resulting table pointer must later be - * passed to this function in order to flush all changes to the file system and - * to free the resources that were allocated by osl_open_table(). - * - * \return Standard. - * - * \sa osl_open_table(), unmap_table(). - */ __export int osl_close_table(struct osl_table *t, enum osl_close_flags flags) { int ret; @@ -1224,19 +1193,6 @@ int init_rbtrees(struct osl_table *t) return 1; } -/** - * Open an osl table. - * - * Each osl table must be opened before its data can be accessed. - * - * \param table_desc Describes the table to be opened. - * \param result Contains a pointer to the open table on success. - * - * The table description given by \a desc should coincide with the - * description used at creation time. - * - * \return Standard. - */ __export int osl_open_table(const struct osl_table_description *table_desc, struct osl_table **result) { @@ -1417,29 +1373,6 @@ static int delete_disk_storage_file(const struct osl_table *t, unsigned col_num, return 1; } -/** - * Add a new row to an osl table and retrieve this row. - * - * \param t Pointer to an open osl table. - * \param objects Array of objects to be added. - * \param row Result pointer. - * - * The \a objects parameter must point to an array containing one object per - * column. The order of the objects in the array is given by the table - * description of \a table. Several sanity checks are performed during object - * insertion and the function returns without modifying the table if any of - * these tests fail. In fact, it is atomic in the sense that it either - * succeeds or leaves the table unchanged (i.e. either all or none of the - * objects are added to the table). - * - * It is considered an error if an object is added to a column with associated - * rbtree if this object is equal to an object already contained in that column - * (i.e. the compare function for the column's rbtree returns zero). - * - * \return Standard. - * - * \sa struct osl_table_description, osl_compare_func, osl_add_row(). - */ __export int osl_add_and_get_row(struct osl_table *t, struct osl_object *objects, struct osl_row **row) { @@ -1582,37 +1515,11 @@ out: return ret; } -/** - * Add a new row to an osl table. - * - * \param t Same meaning as osl_add_and_get_row(). - * \param objects Same meaning as osl_add_and_get_row(). - * - * \return The return value of the underlying call to osl_add_and_get_row(). - * - * This is equivalent to osl_add_and_get_row(t, objects, NULL). - */ __export int osl_add_row(struct osl_table *t, struct osl_object *objects) { return osl_add_and_get_row(t, objects, NULL); } -/** - * Retrieve an object identified by row and column - * - * \param t Pointer to an open osl table. - * \param r Pointer to the row. - * \param col_num The column number. - * \param object The result pointer. - * - * The column determined by \a col_num must be of type \p OSL_MAPPED_STORAGE - * or \p OSL_NO_STORAGE, i.e. no disk storage objects may be retrieved by this - * function. - * - * \return Standard. - * - * \sa osl_storage_type, osl_open_disk_object(). - */ __export int osl_get_object(const struct osl_table *t, const struct osl_row *r, unsigned col_num, struct osl_object *object) { @@ -1646,19 +1553,6 @@ static int mark_mapped_object_invalid(const struct osl_table *t, return 1; } -/** - * Delete a row from an osl table. - * - * \param t Pointer to an open osl table. - * \param row Pointer to the row to delete. - * - * This removes all disk storage objects, removes all rbtree nodes, and frees - * all volatile objects belonging to the given row. For mapped columns, the - * data is merely marked invalid and may be pruned from time to time by - * para_fsck. - * - * \return Standard. - */ __export int osl_del_row(struct osl_table *t, struct osl_row *row) { struct osl_row *r = row; @@ -1715,21 +1609,6 @@ static int check_rbtree_col(const struct osl_table *t, unsigned col_num, return 1; } -/** - * Get the row that contains the given object. - * - * \param t Pointer to an open osl table. - * \param col_num The number of the column to be searched. - * \param obj The object to be looked up. - * \param result Points to the row containing \a obj. - * - * Lookup \a obj in \a t and return the row containing \a obj. The column - * specified by \a col_num must have an associated rbtree. - * - * \return Standard. - * - * \sa osl_storage_flags - */ __export int osl_get_row(const struct osl_table *t, unsigned col_num, const struct osl_object *obj, struct osl_row **result) { @@ -1782,29 +1661,6 @@ static int rbtree_loop_reverse(struct osl_column *col, void *private_data, return 1; } -/** - * Loop over all nodes in an rbtree. - * - * \param t Pointer to an open osl table. - * \param col_num The column to use for iterating over the elements. - * \param private_data Pointer that gets passed to \a func. - * \param func The function to be called for each node in the rbtree. - * - * This function does an in-order walk of the rbtree associated with \a - * col_num. It is an error if the \p OSL_RBTREE flag is not set for this - * column. For each node in the rbtree, the given function \a func is called - * with two pointers as arguments: The first osl_row* argument points to the - * row that contains the object corresponding to the rbtree node currently - * traversed, and the \a private_data pointer is passed verbatim to \a func as the - * second argument. The loop terminates either if \a func returns a negative - * value, or if all nodes of the tree have been visited. - * - * - * \return Standard. If the termination of the loop was caused by \a func - * returning a negative value, \p -E_OSL_LOOP is returned. - * - * \sa osl_storage_flags, osl_rbtree_loop_reverse(), osl_compare_func. - */ __export int osl_rbtree_loop(const struct osl_table *t, unsigned col_num, void *private_data, osl_rbtree_loop_func *func) { @@ -1816,21 +1672,6 @@ __export int osl_rbtree_loop(const struct osl_table *t, unsigned col_num, return rbtree_loop(col, private_data, func); } -/** - * Loop over all nodes in an rbtree in reverse order. - * - * \param t Identical meaning as in \p osl_rbtree_loop(). - * \param col_num Identical meaning as in \p osl_rbtree_loop(). - * \param private_data Identical meaning as in \p osl_rbtree_loop(). - * \param func Identical meaning as in \p osl_rbtree_loop(). - * - * This function is identical to \p osl_rbtree_loop(), the only difference - * is that the tree is walked in reverse order. - * - * \return The same return value as \p osl_rbtree_loop(). - * - * \sa osl_rbtree_loop(). - */ __export int osl_rbtree_loop_reverse(const struct osl_table *t, unsigned col_num, void *private_data, osl_rbtree_loop_func *func) { @@ -1885,25 +1726,6 @@ out: } -/** - * Change an object in an osl table. - * - * \param t Pointer to an open osl table. - * \param r Pointer to the row containing the object to be updated. - * \param col_num Number of the column containing the object to be updated. - * \param obj Pointer to the replacement object. - * - * This function gets rid of all references to the old object. This includes - * removal of the rbtree node in case there is an rbtree associated with \a - * col_num. It then inserts \a obj into the table and the rbtree if necessary. - * - * If the \p OSL_RBTREE flag is set for \a col_num, you \b MUST call this - * function in order to change the contents of an object, even for volatile or - * mapped columns of constant size (which may be updated directly if \p - * OSL_RBTREE is not set). Otherwise the rbtree might become corrupted. - * - * \return Standard - */ __export int osl_update_object(struct osl_table *t, const struct osl_row *r, unsigned col_num, struct osl_object *obj) { @@ -1988,22 +1810,6 @@ __export int osl_update_object(struct osl_table *t, const struct osl_row *r, return 1; } -/** - * Retrieve an object of type \p OSL_DISK_STORAGE by row and column. - * - * \param t Pointer to an open osl table. - * \param r Pointer to the row containing the object. - * \param col_num The column number. - * \param obj Points to the result upon successful return. - * - * For columns of type \p OSL_DISK_STORAGE, this function must be used to - * retrieve one of its containing objects. Afterwards, osl_close_disk_object() - * must be called in order to deallocate the resources. - * - * \return Standard. - * - * \sa osl_get_object(), osl_storage_type, osl_close_disk_object(). - */ __export int osl_open_disk_object(const struct osl_table *t, const struct osl_row *r, unsigned col_num, struct osl_object *obj) { @@ -2030,30 +1836,11 @@ __export int osl_open_disk_object(const struct osl_table *t, const struct osl_ro return ret; } -/** - * Free resources that were allocated during osl_open_disk_object(). - * - * \param obj Pointer to the object previously returned by open_disk_object(). - * - * \return The return value of the underlying call to para_munmap(). - * - * \sa para_munmap(). - */ __export int osl_close_disk_object(struct osl_object *obj) { return para_munmap(obj->data, obj->size); } -/** - * Get the number of rows of the given table. - * - * \param t Pointer to an open osl table. - * \param num_rows Result is returned here. - * - * The number of rows returned via \a num_rows excluding any invalid rows. - * - * \return Positive on success, \p -E_OSL_BAD_TABLE if \a t is \p NULL. - */ __export int osl_get_num_rows(const struct osl_table *t, unsigned *num_rows) { if (!t) @@ -2063,22 +1850,6 @@ __export int osl_get_num_rows(const struct osl_table *t, unsigned *num_rows) return 1; } -/** - * Get the rank of a row. - * - * \param t An open osl table. - * \param r The row to get the rank of. - * \param col_num The number of an rbtree column. - * \param rank Result pointer. - * - * The rank is, by definition, the position of the row in the linear order - * determined by an in-order tree walk of the rbtree associated with column - * number \a col_num of \a table. - * - * \return Standard. - * - * \sa osl_get_nth_row(). - */ __export int osl_get_rank(const struct osl_table *t, struct osl_row *r, unsigned col_num, unsigned *rank) { @@ -2101,25 +1872,6 @@ __export int osl_get_rank(const struct osl_table *t, struct osl_row *r, return 1; } -/** - * Get the row with n-th greatest value. - * - * \param t Pointer to an open osl table. - * \param col_num The column number. - * \param n The rank of the desired row. - * \param result Row is returned here. - * - * Retrieve the n-th order statistic with respect to the compare function - * of the rbtree column \a col_num. In other words, get that row with - * \a n th greatest value in column \a col_num. It's an error if - * \a col_num is not a rbtree column, or if \a n is larger than the - * number of rows in the table. - * - * \return Standard. - * - * \sa osl_storage_flags, osl_compare_func, osl_get_row(), - * osl_rbtree_last_row(), osl_rbtree_first_row(), osl_get_rank(). - */ __export int osl_get_nth_row(const struct osl_table *t, unsigned col_num, unsigned n, struct osl_row **result) { @@ -2145,43 +1897,12 @@ __export int osl_get_nth_row(const struct osl_table *t, unsigned col_num, return 1; } -/** - * Get the row corresponding to the smallest rbtree node of a column. - * - * \param t An open rbtree table. - * \param col_num The number of the rbtree column. - * \param result A pointer to the first row is returned here. - * - * The rbtree node of the smallest object (with respect to the corresponding - * compare function) is selected and the row containing this object is - * returned. It is an error if \a col_num refers to a column without an - * associated rbtree. - * - * \return Standard. - * - * \sa osl_get_nth_row(), osl_rbtree_last_row(). - */ __export int osl_rbtree_first_row(const struct osl_table *t, unsigned col_num, struct osl_row **result) { return osl_get_nth_row(t, col_num, 1, result); } -/** - * Get the row corresponding to the greatest rbtree node of a column. - * - * \param t The same meaning as in \p osl_rbtree_first_row(). - * \param col_num The same meaning as in \p osl_rbtree_first_row(). - * \param result The same meaning as in \p osl_rbtree_first_row(). - * - * This function works just like osl_rbtree_first_row(), the only difference - * is that the row containing the greatest rather than the smallest object is - * returned. - * - * \return Standard. - * - * \sa osl_get_nth_row(), osl_rbtree_first_row(). - */ __export int osl_rbtree_last_row(const struct osl_table *t, unsigned col_num, struct osl_row **result) { diff --git a/osl.h.in b/osl.h.in index 01b69fb..20e930f 100644 --- a/osl.h.in +++ b/osl.h.in @@ -157,38 +157,348 @@ enum osl_close_flags { OSL_FREE_VOLATILE = 2 }; +/** + * Create a new osl table. + * + * \param desc Pointer to the table description. + * + * \return Standard. + */ int osl_create_table(const struct osl_table_description *desc); + +/** + * Open an osl table. + * + * Each osl table must be opened before its data can be accessed. + * + * \param table_desc Describes the table to be opened. + * \param result Contains a pointer to the open table on success. + * + * The table description given by \a desc should coincide with the + * description used at creation time. + * + * \return Standard. + */ int osl_open_table(const struct osl_table_description *desc, struct osl_table **result); + +/** + * Close an osl table. + * + * \param t Pointer to the table to be closed. + * \param flags Options for what should be cleaned up. + * + * If osl_open_table() succeeds, the resulting table pointer must later be + * passed to this function in order to flush all changes to the file system and + * to free the resources that were allocated by osl_open_table(). + * + * \return Standard. + * + * \sa osl_open_table(), unmap_table(). + */ int osl_close_table(struct osl_table *t, enum osl_close_flags flags); + +/** + * Get the row that contains the given object. + * + * \param t Pointer to an open osl table. + * \param col_num The number of the column to be searched. + * \param obj The object to be looked up. + * \param result Points to the row containing \a obj. + * + * Lookup \a obj in \a t and return the row containing \a obj. The column + * specified by \a col_num must have an associated rbtree. + * + * \return Standard. + * + * \sa osl_storage_flags + */ int osl_get_row(const struct osl_table *t, unsigned col_num, const struct osl_object *obj, struct osl_row **result); + +/** + * Retrieve an object identified by row and column + * + * \param t Pointer to an open osl table. + * \param r Pointer to the row. + * \param col_num The column number. + * \param object The result pointer. + * + * The column determined by \a col_num must be of type \p OSL_MAPPED_STORAGE + * or \p OSL_NO_STORAGE, i.e. no disk storage objects may be retrieved by this + * function. + * + * \return Standard. + * + * \sa osl_storage_type, osl_open_disk_object(). + */ int osl_get_object(const struct osl_table *t, const struct osl_row *row, unsigned col_num, struct osl_object *object); + +/** + * Retrieve an object of type \p OSL_DISK_STORAGE by row and column. + * + * \param t Pointer to an open osl table. + * \param r Pointer to the row containing the object. + * \param col_num The column number. + * \param obj Points to the result upon successful return. + * + * For columns of type \p OSL_DISK_STORAGE, this function must be used to + * retrieve one of its containing objects. Afterwards, osl_close_disk_object() + * must be called in order to deallocate the resources. + * + * \return Standard. + * + * \sa osl_get_object(), osl_storage_type, osl_close_disk_object(). + */ int osl_open_disk_object(const struct osl_table *t, const struct osl_row *r, unsigned col_num, struct osl_object *obj); + +/** + * Free resources that were allocated during osl_open_disk_object(). + * + * \param obj Pointer to the object previously returned by open_disk_object(). + * + * \return The return value of the underlying call to para_munmap(). + * + * \sa para_munmap(). + */ int osl_close_disk_object(struct osl_object *obj); + +/** + * Add a new row to an osl table and retrieve this row. + * + * \param t Pointer to an open osl table. + * \param objects Array of objects to be added. + * \param row Result pointer. + * + * The \a objects parameter must point to an array containing one object per + * column. The order of the objects in the array is given by the table + * description of \a table. Several sanity checks are performed during object + * insertion and the function returns without modifying the table if any of + * these tests fail. In fact, it is atomic in the sense that it either + * succeeds or leaves the table unchanged (i.e. either all or none of the + * objects are added to the table). + * + * It is considered an error if an object is added to a column with associated + * rbtree if this object is equal to an object already contained in that column + * (i.e. the compare function for the column's rbtree returns zero). + * + * \return Standard. + * + * \sa struct osl_table_description, osl_compare_func, osl_add_row(). + */ int osl_add_and_get_row(struct osl_table *t, struct osl_object *objects, struct osl_row **row); + + +/** + * Add a new row to an osl table. + * + * \param t Same meaning as osl_add_and_get_row(). + * \param objects Same meaning as osl_add_and_get_row(). + * + * \return The return value of the underlying call to osl_add_and_get_row(). + * + * This is equivalent to osl_add_and_get_row(t, objects, NULL). + */ int osl_add_row(struct osl_table *t, struct osl_object *objects); + +/** + * Delete a row from an osl table. + * + * \param t Pointer to an open osl table. + * \param row Pointer to the row to delete. + * + * This removes all disk storage objects, removes all rbtree nodes, and frees + * all volatile objects belonging to the given row. For mapped columns, the + * data is merely marked invalid and may be pruned from time to time by + * para_fsck. + * + * \return Standard. + */ int osl_del_row(struct osl_table *t, struct osl_row *row); + +/** + * Loop over all nodes in an rbtree. + * + * \param t Pointer to an open osl table. + * \param col_num The column to use for iterating over the elements. + * \param private_data Pointer that gets passed to \a func. + * \param func The function to be called for each node in the rbtree. + * + * This function does an in-order walk of the rbtree associated with \a + * col_num. It is an error if the \p OSL_RBTREE flag is not set for this + * column. For each node in the rbtree, the given function \a func is called + * with two pointers as arguments: The first osl_row* argument points to the + * row that contains the object corresponding to the rbtree node currently + * traversed, and the \a private_data pointer is passed verbatim to \a func as the + * second argument. The loop terminates either if \a func returns a negative + * value, or if all nodes of the tree have been visited. + * + * + * \return Standard. If the termination of the loop was caused by \a func + * returning a negative value, \p -E_OSL_LOOP is returned. + * + * \sa osl_storage_flags, osl_rbtree_loop_reverse(), osl_compare_func. + */ int osl_rbtree_loop(const struct osl_table *t, unsigned col_num, void *private_data, osl_rbtree_loop_func *func); + +/** + * Loop over all nodes in an rbtree in reverse order. + * + * \param t Identical meaning as in \p osl_rbtree_loop(). + * \param col_num Identical meaning as in \p osl_rbtree_loop(). + * \param private_data Identical meaning as in \p osl_rbtree_loop(). + * \param func Identical meaning as in \p osl_rbtree_loop(). + * + * This function is identical to \p osl_rbtree_loop(), the only difference + * is that the tree is walked in reverse order. + * + * \return The same return value as \p osl_rbtree_loop(). + * + * \sa osl_rbtree_loop(). + */ int osl_rbtree_loop_reverse(const struct osl_table *t, unsigned col_num, void *private_data, osl_rbtree_loop_func *func); + +/** + * Change an object in an osl table. + * + * \param t Pointer to an open osl table. + * \param r Pointer to the row containing the object to be updated. + * \param col_num Number of the column containing the object to be updated. + * \param obj Pointer to the replacement object. + * + * This function gets rid of all references to the old object. This includes + * removal of the rbtree node in case there is an rbtree associated with \a + * col_num. It then inserts \a obj into the table and the rbtree if necessary. + * + * If the \p OSL_RBTREE flag is set for \a col_num, you \b MUST call this + * function in order to change the contents of an object, even for volatile or + * mapped columns of constant size (which may be updated directly if \p + * OSL_RBTREE is not set). Otherwise the rbtree might become corrupted. + * + * \return Standard + */ int osl_update_object(struct osl_table *t, const struct osl_row *r, unsigned col_num, struct osl_object *obj); + +/** + * Get the number of rows of the given table. + * + * \param t Pointer to an open osl table. + * \param num_rows Result is returned here. + * + * The number of rows returned via \a num_rows excluding any invalid rows. + * + * \return Positive on success, \p -E_OSL_BAD_TABLE if \a t is \p NULL. + */ int osl_get_num_rows(const struct osl_table *t, unsigned *num_rows); + + +/** + * Get the row corresponding to the smallest rbtree node of a column. + * + * \param t An open rbtree table. + * \param col_num The number of the rbtree column. + * \param result A pointer to the first row is returned here. + * + * The rbtree node of the smallest object (with respect to the corresponding + * compare function) is selected and the row containing this object is + * returned. It is an error if \a col_num refers to a column without an + * associated rbtree. + * + * \return Standard. + * + * \sa osl_get_nth_row(), osl_rbtree_last_row(). + */ int osl_rbtree_first_row(const struct osl_table *t, unsigned col_num, struct osl_row **result); + +/** + * Get the row corresponding to the greatest rbtree node of a column. + * + * \param t The same meaning as in \p osl_rbtree_first_row(). + * \param col_num The same meaning as in \p osl_rbtree_first_row(). + * \param result The same meaning as in \p osl_rbtree_first_row(). + * + * This function works just like osl_rbtree_first_row(), the only difference + * is that the row containing the greatest rather than the smallest object is + * returned. + * + * \return Standard. + * + * \sa osl_get_nth_row(), osl_rbtree_first_row(). + */ int osl_rbtree_last_row(const struct osl_table *t, unsigned col_num, struct osl_row **result); + +/** + * Get the row with n-th greatest value. + * + * \param t Pointer to an open osl table. + * \param col_num The column number. + * \param n The rank of the desired row. + * \param result Row is returned here. + * + * Retrieve the n-th order statistic with respect to the compare function + * of the rbtree column \a col_num. In other words, get that row with + * \a n th greatest value in column \a col_num. It's an error if + * \a col_num is not a rbtree column, or if \a n is larger than the + * number of rows in the table. + * + * \return Standard. + * + * \sa osl_storage_flags, osl_compare_func, osl_get_row(), + * osl_rbtree_last_row(), osl_rbtree_first_row(), osl_get_rank(). + */ int osl_get_nth_row(const struct osl_table *t, unsigned col_num, unsigned n, struct osl_row **result); + +/** + * Get the rank of a row. + * + * \param t An open osl table. + * \param r The row to get the rank of. + * \param col_num The number of an rbtree column. + * \param rank Result pointer. + * + * The rank is, by definition, the position of the row in the linear order + * determined by an in-order tree walk of the rbtree associated with column + * number \a col_num of \a table. + * + * \return Standard. + * + * \sa osl_get_nth_row(). + */ int osl_get_rank(const struct osl_table *t, struct osl_row *r, unsigned col_num, unsigned *rank); + +/** + * Compare two osl objects pointing to hash values. + * + * \param obj1 Pointer to the first hash object. + * \param obj2 Pointer to the second hash object. + * + * \return The values required for an osl compare function. + * + * \sa osl_compare_func, uint32_compare(). + */ int osl_hash_compare(const struct osl_object *obj1, const struct osl_object *obj2); -const char *osl_strerror(int nr); + +/** + * Get a string describing the error code passed in the argument. + * + * \param num The error code. + * + * This works just like strerror(3). The given number must be an osl error + * code. The result must not be freed by the caller. + * + * \return The error text corresponding to an osl error code. + */ +const char *osl_strerror(int num); #pragma GCC visibility pop