X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fsn_network.h;h=ee95e8ee973dda6a2ddb9f4592c01bf0d3c5fa0e;hb=3a18f201b43da9852a2e19941b9a60f512409877;hp=a734cadb30e8d29d5bd65600d3023d705ad95417;hpb=f3635d61e91198d4a40126bab3e4a3c1b1e49724;p=sort-networks.git diff --git a/src/sn_network.h b/src/sn_network.h index a734cad..ee95e8e 100644 --- a/src/sn_network.h +++ b/src/sn_network.h @@ -51,10 +51,11 @@ typedef struct sn_network_s sn_network_t; #define SN_NETWORK_INPUT_NUM(n) (n)->inputs_num /** - * Creates an empty comparator network and returns a pointer to it. + * Creates an empty comparator network and returns a pointer to it. The + * comparator network must be freed using sn_network_destroy(). * * \param inputs_num Number of inputs the comparator network has. - * \return Pointer to the comparator network or NULL on error. + * \return Pointer to the comparator network or \c NULL on error. */ sn_network_t *sn_network_create (int inputs_num); @@ -62,16 +63,17 @@ sn_network_t *sn_network_create (int inputs_num); * Clones an existing comparator network. * * \param n Comparator network to clone. - * \return Copied sort network or NULL on error. The returned network must be - * freed using sn_network_destroy(). + * \return Copied sort network or \c NULL on error. The returned network must + * be freed using sn_network_destroy(). */ sn_network_t *sn_network_clone (const sn_network_t *n); /** * Destroys a comparator network allocated with sn_network_create() or one of - * the other methods returning a sn_network_t. This frees all allocated space. + * the other methods returning a \c sn_network_t. This frees all allocated + * space. * - * \param n The comparator network to destroy. May be NULL. + * \param n The comparator network to destroy. May be \c NULL. */ void sn_network_destroy (sn_network_t *n); @@ -79,7 +81,7 @@ void sn_network_destroy (sn_network_t *n); * Creates a new sort network using Batcher's Odd-Even-Mergesort algorithm. * * \param inputs_num Number of inputs / outputs of the sorting network. - * \return A pointer to the newly allocated sorting network or NULL if an + * \return A pointer to the newly allocated sorting network or \c NULL if an * invalid number of inputs was given or allocation failed. */ sn_network_t *sn_network_create_odd_even_mergesort (int inputs_num); @@ -139,6 +141,7 @@ int sn_network_get_comparator_num (const sn_network_t *n); * comparator network. Otherwise, segmentation faults or memory corruption * will occur. * \return Zero on success, non-zero on failure. + * \see sn_stage_sort */ int sn_network_sort (sn_network_t *n, int *values); @@ -153,6 +156,13 @@ int sn_network_sort (sn_network_t *n, int *values); */ int sn_network_brute_force_check (sn_network_t *n); +/** + * Prints the comparator network to STDOUT using a human readable + * representation. + * + * \param n The comparator network to display. + * \return Zero on success, non-zero on failure. + */ int sn_network_show (sn_network_t *n); /** @@ -232,13 +242,70 @@ sn_network_t *sn_network_combine_bitonic_merge (sn_network_t *n0, sn_network_t * */ sn_network_t *sn_network_combine_odd_even_merge (sn_network_t *n0, sn_network_t *n1); +/** + * Reads a comparator network from a open file handle. + * + * \param fh The FILE pointer to read from. + * \return A newly allocated comparator network or NULL on error. + * \see sn_network_read_file + */ sn_network_t *sn_network_read (FILE *fh); + +/** + * Reads a comparator network from a file. + * + * \param file File name to read the network from. + * \return A newly allocated comparator network or NULL on error. + * \see sn_network_read + */ sn_network_t *sn_network_read_file (const char *file); + +/** + * Writes a comparator network to a file handle. + * + * \param n The comparator network to write. + * \param fh The file handle to write to. Must be opened in write mode. + * \return Zero on success, non-zero on failure. + * \see sn_network_write_file + */ int sn_network_write (sn_network_t *n, FILE *fh); + +/** + * Writes a comparator network to a file. + * + * \param n The comparator network to write. + * \param fh The file name to write the network to. + * \return Zero on success, non-zero on failure. + * \see sn_network_write + */ int sn_network_write_file (sn_network_t *n, const char *file); +/** + * Creates a serialized form of the given comparator network. The serialized + * form is byte-order independent and can easily be sent over a computer + * network. + * + * \param n The comparator network to serialize. + * \param[out] ret_buffer Pointer to a pointer into which the location of the + * allocated memory will be written. It is the caller's responsibility to + * free this memory. + * \param[out] ret_buffer_size Pointer to a size_t into which the size of the + * allocated memory will be written. + * \return Zero on success, non-zero on failure. + * \see sn_network_unserialize + */ int sn_network_serialize (sn_network_t *n, char **ret_buffer, size_t *ret_buffer_size); + +/** + * Creates a comparator network from its serialized form. + * + * \param buffer Pointer to a buffer containing the comparator network in + * serialized form. + * \param buffer_size Size of the buffer (in bytes). + * \return Pointer to the newly allocated comparator network or NULL on error. + * \see sn_network_serialize + */ sn_network_t *sn_network_unserialize (char *buffer, size_t buffer_size); #endif /* SN_NETWORK_H */