#define SN_NETWORK_H 1
#include <stdio.h>
+#include <stdint.h>
+#include <inttypes.h>
#include "sn_comparator.h"
#include "sn_stage.h"
sn_network_t *sn_network_create_odd_even_mergesort (int inputs_num);
/**
+ * Creates a new sort network using Batcher's Bitonic-Mergesort algorithm.
+ *
+ * \param inputs_num Number of inputs / outputs of the sorting network.
+ * \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_bitonic_mergesort (int inputs_num);
+
+/**
* Creates a new sorting network using the Pairwise sorting algorithm published
* by Ian Parberry.
* \param inputs_num Number of inputs / outputs of the sorting network.
* \return Zero on success, non-zero on failure.
*/
int sn_network_show (sn_network_t *n);
+int sn_network_show_fh (sn_network_t *n, FILE *fh);
/**
* Inverts a comparator network by switching the direction of all comparators.
*/
int sn_network_normalize (sn_network_t *n);
+int sn_network_unify (sn_network_t *n);
+
/**
* Removes an input and all comparators touching that input from the comparator
* network.
* \see sn_network_serialize
*/
sn_network_t *sn_network_unserialize (char *buffer, size_t buffer_size);
+
+/**
+ * Compares two networks and returns zero if they are equal. If they are not
+ * equal, a number greater than zero or less than zero is returned in a
+ * consistent matter, so this function can be used to sort networks and detect
+ * duplicates. It is strongly recommended that you call sn_network_unify()
+ * before comparing two networks, because they internal structure does matter
+ * for this function.
+ *
+ * \return Zero if the two networks are equal, non-zero otherwise. Return
+ * values are consistent so this function can be used to sort networks.
+ * \see sn_network_unify
+ */
+int sn_network_compare (const sn_network_t *n0, const sn_network_t *n1);
+
+uint64_t sn_network_get_hashval (const sn_network_t *n);
+
#endif /* SN_NETWORK_H */
/* vim: set shiftwidth=2 softtabstop=2 : */