]> Sergey Matveev's repositories - rutrackerer.git/blobdiff - cmd/search/main.go
Less gob calls -- several times faster search
[rutrackerer.git] / cmd / search / main.go
index 0645be046ad8482c2e95e050de78c81a9f40de2c..ff757b607511f5aacd409258fc52978f232cb21e 100644 (file)
@@ -5,7 +5,6 @@ import (
        "encoding/gob"
        "encoding/hex"
        "fmt"
-       "io"
        "os"
        "os/exec"
        "strconv"
@@ -28,7 +27,11 @@ func main() {
        if err = cmd.Start(); err != nil {
                panic(err)
        }
-       torrents := make([]*rutrackerer.Torrent, 0, 1<<20)
+       var torrents []*rutrackerer.Torrent
+       gobDec := gob.NewDecoder(bufio.NewReader(os.Stdin))
+       if err = gobDec.Decode(&torrents); err != nil {
+               panic(err)
+       }
        printer := make(chan struct{})
        go func() {
                scanner := bufio.NewScanner(grepStdout)
@@ -63,17 +66,8 @@ func main() {
                }
                close(printer)
        }()
-       gobDec := gob.NewDecoder(bufio.NewReader(os.Stdin))
-       for {
-               var torrent rutrackerer.Torrent
-               if err = gobDec.Decode(&torrent); err != nil {
-                       if err == io.EOF {
-                               break
-                       }
-                       panic(err)
-               }
-               torrents = append(torrents, &torrent)
-               if _, err = grepStdin.Write([]byte(torrent.Title + "\n")); err != nil {
+       for _, t := range torrents {
+               if _, err = grepStdin.Write([]byte(t.Title + "\n")); err != nil {
                        panic(err)
                }
        }