iplist/packed.go | 21 +++++++++++++++++++++ diff --git a/iplist/packed.go b/iplist/packed.go index e6ab41ad23506afb95a9b270df6693e465a30753..2282b75ed9d77e72d9ac7248f1abc036b738e335 100644 --- a/iplist/packed.go +++ b/iplist/packed.go @@ -4,6 +4,9 @@ import ( "encoding/binary" "io" "net" + "os" + + "github.com/edsrzf/mmap-go" ) // The packed format is an 8 byte integer of the number of ranges. Then 20 @@ -110,3 +113,21 @@ return } return lookup(me.getFirst, me.getRange, me.len(), ip4) } + +func MMapPacked(filename string) (ret Ranger, err error) { + f, err := os.Open(filename) + if os.IsNotExist(err) { + err = nil + return + } + if err != nil { + return + } + defer f.Close() + mm, err := mmap.Map(f, mmap.RDONLY, 0) + if err != nil { + return + } + ret = NewFromPacked(mm) + return +}