src/sn_network.h: Add missing documentation.
[sort-networks.git] / src / sn_network.h
index 981cfd7..ee95e8e 100644 (file)
@@ -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);
@@ -89,7 +91,7 @@ sn_network_t *sn_network_create_odd_even_mergesort (int inputs_num);
  *
  * \param n The comparator network to which to add the stage.
  * \param s A pointer to a stage. The memory pointed to by this parameter is
- *   not copied and freed by sn_network_destroy. It is the caller's
+ *   not copied and freed by sn_network_destroy(). It is the caller's
  *   responsibility to call sn_stage_clone() if appropriate.
  * \return Zero on success, non-zero on failure.
  */
@@ -121,7 +123,7 @@ int sn_network_comparator_add (sn_network_t *n, const sn_comparator_t *c);
 /**
  * Returns the number of comparators contained in the comparator network. This
  * will traverse all comparators in all stages, resulting in a running time of
- * O(n).
+ * \f$ \mathcal{O}(n) \f$.
  *
  * \param n Comparator network to work with.
  * \return The number of comparators contained in the network or less than zero
@@ -139,13 +141,14 @@ 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);
 
 /**
  * Checks whether a given comparator network is a sorting network by testing
- * all 2^n 0-1-patterns. Since this function has exponential running time,
- * using it with comparator networks with many inputs is not advisable.
+ * all \f$ 2^n \f$ 0-1-patterns. Since this function has exponential running
+ * time, using it with comparator networks with many inputs is not advisable.
  *
  * \param n The comparator network to test.
  * \return Zero if the comparator network is a sort network, one if the
@@ -153,25 +156,156 @@ 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);
+
+/**
+ * Inverts a comparator network by switching the direction of all comparators.
+ *
+ * \param n The network to invert.
+ * \return Zero on success, non-zero on failure.
+ */
 int sn_network_invert (sn_network_t *n);
+
+/**
+ * Shifts a comparator network (permutes the inputs). Each input is shifted
+ * \f$ s \f$ positions, higher inputs are "wrapped around".
+ *
+ * \param n The comparator network to shift.
+ * \param s The number of positions to shift.
+ * \return Zero on success, non-zero on failure.
+ */
 int sn_network_shift (sn_network_t *n, int s);
+
+/**
+ * Compresses a comparator network by moving all comparators to the earliest
+ * possible stage and removing all remaining empty stages.
+ *
+ * \param n The network to compress.
+ * \return Zero on success, non-zero on failure.
+ */
 int sn_network_compress (sn_network_t *n);
+
+/**
+ * Converts a non-standard comparator network to a standard comparator network,
+ * i.e. a network in which all comparators point in the same direction.
+ *
+ * \param n The network to normalize.
+ * \return Zero on success, non-zero on failure.
+ */
 int sn_network_normalize (sn_network_t *n);
 
+/**
+ * Removes an inputs from a comparator network by assuming positive or negative
+ * infinity to be supplied to a given input. The value will take a
+ * deterministic way through the comparator network. After removing the path
+ * and all comparators it touched from the comparator network, a new comparator
+ * network with \f$ n-1 \f$ inputs remains. The remaining outputs behave
+ * identical to the original network with respect to one another.
+ *
+ * \param n The comparator network to modify.
+ * \param input The input to remove.
+ * \param dir The direction in which to cut, i.e. whether to assume positive or
+ *   negative infinity.
+ * \return Zero on success, non-zero on failure.
+ */
 int sn_network_cut_at (sn_network_t *n, int input, enum sn_network_cut_dir_e dir);
-sn_network_t *sn_network_combine (sn_network_t *n0, sn_network_t *n1,
-    int is_power_of_two);
-sn_network_t *sn_network_combine_bitonic (sn_network_t *n0, sn_network_t *n1);
+
+/**
+ * An alias for sn_network_combine_odd_even_merge().
+ */
+sn_network_t *sn_network_combine (sn_network_t *n0, sn_network_t *n1);
+
+/**
+ * Combines two comparator networks using a bitonic merger. The number of
+ * inputs of both comparator networks must be identical and a power of two.
+ *
+ * \param n0 First network.
+ * \param n1 Second network.
+ * \return Newly allocated network with twice the number of inputs or NULL on
+ *   error.
+ */
+sn_network_t *sn_network_combine_bitonic_merge (sn_network_t *n0, sn_network_t *n1);
+
+/**
+ * Combines two comparator networks using the odd-even-merger.
+ *
+ * \param n0 First network.
+ * \param n1 Second network.
+ * \return Newly allocated network or NULL on error.
+ */
 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 */