X-Git-Url: https://git.octo.it/?a=blobdiff_plain;ds=sidebyside;f=src%2Fsn_network.c;h=6908cf85f0c1ad42bc08203211d1b3c8d46af46e;hb=1e765313eb44b5707ea9cdc3429ce5da48cfbcd3;hp=1b3dd3630515aaa92adbdd18eeed51cd2a2fb427;hpb=c43a45975e025cb5005f46b4c930b0888806ed97;p=sort-networks.git diff --git a/src/sn_network.c b/src/sn_network.c index 1b3dd36..6908cf8 100644 --- a/src/sn_network.c +++ b/src/sn_network.c @@ -464,6 +464,21 @@ int sn_network_normalize (sn_network_t *n) /* {{{ */ return (0); } /* }}} int sn_network_normalize */ +int sn_network_remove_input (sn_network_t *n, int input) /* {{{ */ +{ + int i; + + if ((n == NULL) || (input < 0) || (input >= n->inputs_num)) + return (EINVAL); + + for (i = 0; i < n->stages_num; i++) + sn_stage_remove_input (n->stages[i], input); + + n->inputs_num--; + + return (0); +} /* }}} int sn_network_remove_input */ + int sn_network_cut_at (sn_network_t *n, int input, /* {{{ */ enum sn_network_cut_dir_e dir) { @@ -492,13 +507,36 @@ int sn_network_cut_at (sn_network_t *n, int input, /* {{{ */ assert (((dir == DIR_MIN) && (position == 0)) || ((dir == DIR_MAX) && (position == (n->inputs_num - 1)))); + sn_network_remove_input (n, position); + + return (0); +} /* }}} int sn_network_cut_at */ + +int sn_network_cut (sn_network_t *n, int *mask) /* {{{ */ +{ + int inputs_num; + int i; + for (i = 0; i < n->stages_num; i++) - sn_stage_remove_input (n->stages[i], position); + { + sn_stage_t *s = n->stages[i]; - n->inputs_num--; + sn_stage_cut (s, mask, n->stages); + } + + /* Use a copy of this member since it will be updated by + * sn_network_remove_input(). */ + inputs_num = n->inputs_num; + for (i = 0; i < inputs_num; i++) + { + if (mask[i] < 0) + sn_network_remove_input (n, 0); + else if (mask[i] > 0) + sn_network_remove_input (n, n->inputs_num - 1); + } return (0); -} /* }}} int sn_network_cut_at */ +} /* }}} int sn_network_cut */ /* sn_network_concatenate *