diff --git a/lightningd/utxo.c b/lightningd/utxo.c index 4091eff65..b8c688f46 100644 --- a/lightningd/utxo.c +++ b/lightningd/utxo.c @@ -18,20 +18,3 @@ void fromwire_utxo(const u8 **ptr, size_t *max, struct utxo *utxo) utxo->keyindex = fromwire_u32(ptr, max); utxo->is_p2sh = fromwire_bool(ptr, max); } - -void fromwire_utxo_array(const u8 **ptr, size_t *max, - struct utxo *utxo, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - fromwire_utxo(ptr, max, &utxo[i]); -} - -void towire_utxo_array(u8 **pptr, const struct utxo *utxo, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - towire_utxo(pptr, &utxo[i]); -} diff --git a/lightningd/utxo.h b/lightningd/utxo.h index a2eb5ca7d..0b4ef0c61 100644 --- a/lightningd/utxo.h +++ b/lightningd/utxo.h @@ -16,9 +16,4 @@ struct utxo { void towire_utxo(u8 **pptr, const struct utxo *utxo); void fromwire_utxo(const u8 **ptr, size_t *max, struct utxo *utxo); - -void fromwire_utxo_array(const u8 **ptr, size_t *max, - struct utxo *utxo, size_t num); - -void towire_utxo_array(u8 **pptr, const struct utxo *utxo, size_t num); #endif /* LIGHTNING_LIGHTNINGD_UTXO_H */ diff --git a/tools/generate-wire.py b/tools/generate-wire.py index deef23433..ac7dc4431 100755 --- a/tools/generate-wire.py +++ b/tools/generate-wire.py @@ -31,6 +31,10 @@ class FieldType(object): def is_assignable(self): return self.name in ['u8', 'u16', 'u32', 'u64', 'bool'] + # We only accelerate the u8 case: it's common and trivial. + def has_array_helper(self): + return self.name in ['u8'] + # Returns base size @staticmethod def _typesize(typename): @@ -127,6 +131,9 @@ class Field(object): return False return self.fieldtype.is_assignable() + def has_array_helper(self): + return self.fieldtype.has_array_helper() + # Returns FieldType @staticmethod def _guess_type(message, fieldname, base_size): @@ -209,6 +216,20 @@ class Message(object): self.has_variable_fields = True self.fields.append(field) + def print_fromwire_array(self, subcalls, basetype, f, name, num_elems): + if f.has_array_helper(): + subcalls.append('\tfromwire_{}_array(&cursor, plen, {}, {});' + .format(basetype, name, num_elems)) + else: + subcalls.append('\tfor (size_t i = 0; i < {}; i++)' + .format(num_elems)) + if f.is_assignable(): + subcalls.append('\t\t{}[i] = fromwire_{}(&cursor, plen);' + .format(name, basetype)) + else: + subcalls.append('\t\tfromwire_{}(&cursor, plen, {} + i);' + .format(basetype, name)) + def print_fromwire(self,is_header): ctx_arg = 'const tal_t *ctx, ' if self.has_variable_fields else '' @@ -240,15 +261,15 @@ class Message(object): subcalls.append('\tfromwire_pad(&cursor, plen, {});' .format(f.num_elems)) elif f.is_array(): - subcalls.append("\t//1th case {name}".format(name=f.name)) - subcalls.append('\tfromwire_{}_array(&cursor, plen, {}, {});' - .format(basetype, f.name, f.num_elems)) + self.print_fromwire_array(subcalls, basetype, f, f.name, + f.num_elems) elif f.is_variable_size(): subcalls.append("\t//2th case {name}".format(name=f.name)) subcalls.append('\t*{} = tal_arr(ctx, {}, {});' .format(f.name, f.fieldtype.name, f.lenvar)) - subcalls.append('\tfromwire_{}_array(&cursor, plen, *{}, {});' - .format(basetype, f.name, f.lenvar)) + + self.print_fromwire_array(subcalls, basetype, f, '*'+f.name, + f.lenvar) elif f.is_assignable(): subcalls.append("\t//3th case {name}".format(name=f.name)) if f.is_len_var: @@ -271,6 +292,15 @@ class Message(object): subcalls='\n'.join(subcalls) ) + def print_towire_array(self, subcalls, basetype, f, num_elems): + if f.has_array_helper(): + subcalls.append('\ttowire_{}_array(&p, {}, {});' + .format(basetype, f.name, num_elems)) + else: + subcalls.append('\tfor (size_t i = 0; i < {}; i++)\n' + '\t\ttowire_{}(&p, {} + i);' + .format(num_elems, basetype, f.name)) + def print_towire(self,is_header): template = towire_header_templ if is_header else towire_impl_templ args = [] @@ -304,11 +334,9 @@ class Message(object): subcalls.append('\ttowire_pad(&p, {});' .format(f.num_elems)) elif f.is_array(): - subcalls.append('\ttowire_{}_array(&p, {}, {});' - .format(basetype, f.name, f.num_elems)) + self.print_towire_array(subcalls, basetype, f, f.num_elems) elif f.is_variable_size(): - subcalls.append('\ttowire_{}_array(&p, {}, {});' - .format(basetype, f.name, f.lenvar)) + self.print_towire_array(subcalls, basetype, f, f.lenvar) else: subcalls.append('\ttowire_{}(&p, {});' .format(basetype, f.name)) diff --git a/wire/fromwire.c b/wire/fromwire.c index ab49e4a2e..3859525fa 100644 --- a/wire/fromwire.c +++ b/wire/fromwire.c @@ -160,53 +160,11 @@ void fromwire_u8_array(const u8 **cursor, size_t *max, u8 *arr, size_t num) fromwire(cursor, max, arr, num); } -void fromwire_u32_array(const u8 **cursor, size_t *max, u32 *arr, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - arr[i] = fromwire_u32(cursor, max); -} - -void fromwire_u64_array(const u8 **cursor, size_t *max, u64 *arr, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - arr[i] = fromwire_u64(cursor, max); -} - -void fromwire_bool_array(const u8 **cursor, size_t *max, bool *arr, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - arr[i] = fromwire_bool(cursor, max); -} - void fromwire_pad(const u8 **cursor, size_t *max, size_t num) { fromwire(cursor, max, NULL, num); } -void fromwire_secp256k1_ecdsa_signature_array(const u8 **cursor, size_t *max, - secp256k1_ecdsa_signature *arr, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - fromwire_secp256k1_ecdsa_signature(cursor, max, arr + i); -} - -void fromwire_sha256_double_array(const u8 **cursor, size_t *max, - struct sha256_double *arr, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - fromwire_sha256_double(cursor, max, arr + i); -} - static char *fmt_short_channel_id(const tal_t *ctx, const struct short_channel_id *id) { diff --git a/wire/towire.c b/wire/towire.c index db999e75e..3ec232cda 100644 --- a/wire/towire.c +++ b/wire/towire.c @@ -104,30 +104,6 @@ void towire_u8_array(u8 **pptr, const u8 *arr, size_t num) towire(pptr, arr, num); } -void towire_u32_array(u8 **pptr, const u32 *arr, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - towire_u32(pptr, arr[i]); -} - -void towire_u64_array(u8 **pptr, const u64 *arr, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - towire_u64(pptr, arr[i]); -} - -void towire_bool_array(u8 **pptr, const bool *arr, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - towire_bool(pptr, arr[i]); -} - void towire_pad(u8 **pptr, size_t num) { /* Simply insert zeros. */ @@ -136,21 +112,3 @@ void towire_pad(u8 **pptr, size_t num) tal_resize(pptr, oldsize + num); memset(*pptr + oldsize, 0, num); } - -void towire_secp256k1_ecdsa_signature_array(u8 **pptr, - const secp256k1_ecdsa_signature *arr, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - towire_secp256k1_ecdsa_signature(pptr, arr+i); -} - -void towire_sha256_double_array(u8 **pptr, - const struct sha256_double *arr, size_t num) -{ - size_t i; - - for (i = 0; i < num; i++) - towire_sha256_double(pptr, arr+i); -} diff --git a/wire/wire.h b/wire/wire.h index bd974b086..86639f82b 100644 --- a/wire/wire.h +++ b/wire/wire.h @@ -43,14 +43,6 @@ void towire_pad(u8 **pptr, size_t num); void towire_bool(u8 **pptr, bool v); void towire_u8_array(u8 **pptr, const u8 *arr, size_t num); -void towire_u32_array(u8 **pptr, const u32 *arr, size_t num); -void towire_u64_array(u8 **pptr, const u64 *arr, size_t num); -void towire_bool_array(u8 **pptr, const bool *arr, size_t num); -void towire_secp256k1_ecdsa_signature_array(u8 **pptr, - const secp256k1_ecdsa_signature *arr, size_t num); -void towire_sha256_double_array(u8 **pptr, - const struct sha256_double *arr, size_t num); - const u8 *fromwire(const u8 **cursor, size_t *max, void *copy, size_t n); u8 fromwire_u8(const u8 **cursor, size_t *max); @@ -73,12 +65,4 @@ void fromwire_ipv6(const u8 **cursor, size_t *max, struct ipv6 *ipv6); void fromwire_pad(const u8 **cursor, size_t *max, size_t num); void fromwire_u8_array(const u8 **cursor, size_t *max, u8 *arr, size_t num); -void fromwire_u32_array(const u8 **cursor, size_t *max, u32 *arr, size_t num); -void fromwire_u64_array(const u8 **cursor, size_t *max, u64 *arr, size_t num); -void fromwire_bool_array(const u8 **cursor, size_t *max, bool *arr, size_t num); - -void fromwire_secp256k1_ecdsa_signature_array(const u8 **cursor, size_t *max, - secp256k1_ecdsa_signature *arr, size_t num); -void fromwire_sha256_double_array(const u8 **cursor, size_t *max, - struct sha256_double *arr, size_t num); #endif /* LIGHTNING_WIRE_WIRE_H */