From f54b010e4b106737aaade12066246e72cc7aa5a2 Mon Sep 17 00:00:00 2001 From: Dave Collins Date: Wed, 6 Nov 2013 00:47:57 -0600 Subject: [PATCH] Optimize writeOutPoint. Before: BenchmarkWriteOutPoint 500000 2664 ns/op After: BenchmarkWriteOutPoint 10000000 151 ns/op This is part ef the ongoing effort to optimize serialization as noted in conformal/btcd#27. --- msgtx.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/msgtx.go b/msgtx.go index 8151fe0a..7c941455 100644 --- a/msgtx.go +++ b/msgtx.go @@ -6,6 +6,7 @@ package btcwire import ( "bytes" + "encoding/binary" "fmt" "io" ) @@ -426,7 +427,14 @@ func readOutPoint(r io.Reader, pver uint32, version uint32, op *OutPoint) error // writeOutPoint encodes op to the bitcoin protocol encoding for an OutPoint // to w. func writeOutPoint(w io.Writer, pver uint32, version uint32, op *OutPoint) error { - err := writeElements(w, op.Hash, op.Index) + _, err := w.Write(op.Hash[:]) + if err != nil { + return err + } + + buf := make([]byte, 4) + binary.LittleEndian.PutUint32(buf, op.Index) + _, err = w.Write(buf) if err != nil { return err }