src/sn-evolution.c: Added a first version of evolutionary optimization.
[sort-networks.git] / src / sn_network.h
1 #ifndef SN_NETWORK_H
2 #define SN_NETWORK_H 1
3
4 #include <stdio.h>
5
6 #include "sn_comparator.h"
7 #include "sn_stage.h"
8
9 struct sn_network_s
10 {
11   int inputs_num;
12   sn_stage_t **stages;
13   int stages_num;
14 };
15 typedef struct sn_network_s sn_network_t;
16
17 #define SN_NETWORK_STAGE_NUM(n) (n)->stages_num
18 #define SN_NETWORK_STAGE_GET(n,i) ((n)->stages[i])
19 #define SN_NETWORK_INPUT_NUM(n) (n)->inputs_num
20
21 sn_network_t *sn_network_create (int inputs_num);
22 void sn_network_destroy (sn_network_t *n);
23
24 int sn_network_stage_add (sn_network_t *n, sn_stage_t *s);
25 int sn_network_stage_remove (sn_network_t *n, int s_num);
26
27 int sn_network_show (sn_network_t *n);
28 int sn_network_invert (sn_network_t *n);
29 int sn_network_compress (sn_network_t *n);
30
31 int sn_network_cut_at (sn_network_t *n, int input, enum sn_network_cut_dir_e dir);
32 sn_network_t *sn_network_combine (sn_network_t *n0, sn_network_t *n1);
33
34 sn_network_t *sn_network_read (FILE *fh);
35 sn_network_t *sn_network_read_file (const char *file);
36 int sn_network_write (sn_network_t *n, FILE *fh);
37
38 #endif /* SN_NETWORK_H */
39
40 /* vim: set shiftwidth=2 softtabstop=2 : */