mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-24 01:24:26 +01:00
permute_tx: don't save permutation map.
We no longer need it anywhere. This simplifies things to the point where we might as well just not include dust outputs as we go, rather than explicitly removing them, which gets rid of remove_dust.c as well. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
65
permute_tx.c
65
permute_tx.c
@@ -2,32 +2,6 @@
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
|
||||
static void init_map(int *map, size_t len)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
if (!map)
|
||||
return;
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
map[i] = i;
|
||||
}
|
||||
|
||||
/* This map says where things ended up, eg. 0 might be in slot 3. we
|
||||
* want to change it so map[0] = 3. */
|
||||
static void invert_map(int *map, size_t len)
|
||||
{
|
||||
if (map) {
|
||||
int i, newmap[len];
|
||||
|
||||
memset(newmap, 0, sizeof(newmap));
|
||||
for (i = 0; i < len; i++) {
|
||||
newmap[map[i]] = i;
|
||||
}
|
||||
memcpy(map, newmap, sizeof(newmap));
|
||||
}
|
||||
}
|
||||
|
||||
static bool input_better(const struct bitcoin_tx_input *a,
|
||||
const struct bitcoin_tx_input *b)
|
||||
{
|
||||
@@ -59,56 +33,35 @@ static size_t find_best_in(struct bitcoin_tx_input *inputs, size_t num)
|
||||
return best;
|
||||
}
|
||||
|
||||
static void swap_inputs(struct bitcoin_tx_input *inputs, int *map,
|
||||
size_t i1, size_t i2)
|
||||
static void swap_inputs(struct bitcoin_tx_input *inputs, size_t i1, size_t i2)
|
||||
{
|
||||
struct bitcoin_tx_input tmpinput;
|
||||
size_t tmpidx;
|
||||
|
||||
tmpinput = inputs[i1];
|
||||
inputs[i1] = inputs[i2];
|
||||
inputs[i2] = tmpinput;
|
||||
|
||||
if (map) {
|
||||
tmpidx = map[i1];
|
||||
map[i1] = map[i2];
|
||||
map[i2] = tmpidx;
|
||||
}
|
||||
}
|
||||
|
||||
void permute_inputs(struct bitcoin_tx_input *inputs,
|
||||
size_t num_inputs,
|
||||
int *map)
|
||||
void permute_inputs(struct bitcoin_tx_input *inputs, size_t num_inputs)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
init_map(map, num_inputs);
|
||||
|
||||
/* Now do a dumb sort (num_inputs is small). */
|
||||
for (i = 0; i < num_inputs; i++) {
|
||||
/* Swap best into first place. */
|
||||
swap_inputs(inputs, map,
|
||||
swap_inputs(inputs,
|
||||
i, i + find_best_in(inputs + i, num_inputs - i));
|
||||
}
|
||||
|
||||
invert_map(map, num_inputs);
|
||||
}
|
||||
|
||||
static void swap_outputs(struct bitcoin_tx_output *outputs, int *map,
|
||||
static void swap_outputs(struct bitcoin_tx_output *outputs,
|
||||
size_t i1, size_t i2)
|
||||
{
|
||||
struct bitcoin_tx_output tmpoutput;
|
||||
size_t tmpidx;
|
||||
|
||||
tmpoutput = outputs[i1];
|
||||
outputs[i1] = outputs[i2];
|
||||
outputs[i2] = tmpoutput;
|
||||
|
||||
if (map) {
|
||||
tmpidx = map[i1];
|
||||
map[i1] = map[i2];
|
||||
map[i2] = tmpidx;
|
||||
}
|
||||
}
|
||||
|
||||
static bool output_better(const struct bitcoin_tx_output *a,
|
||||
@@ -144,20 +97,14 @@ static size_t find_best_out(struct bitcoin_tx_output *outputs, size_t num)
|
||||
return best;
|
||||
}
|
||||
|
||||
void permute_outputs(struct bitcoin_tx_output *outputs,
|
||||
size_t num_outputs,
|
||||
int *map)
|
||||
void permute_outputs(struct bitcoin_tx_output *outputs, size_t num_outputs)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
init_map(map, num_outputs);
|
||||
|
||||
/* Now do a dumb sort (num_outputs is small). */
|
||||
for (i = 0; i < num_outputs; i++) {
|
||||
/* Swap best into first place. */
|
||||
swap_outputs(outputs, map,
|
||||
swap_outputs(outputs,
|
||||
i, i + find_best_out(outputs + i, num_outputs - i));
|
||||
}
|
||||
|
||||
invert_map(map, num_outputs);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user