X-Git-Url: https://git.arvados.org/lightning.git/blobdiff_plain/c104cfb4a7ed81d3e7188b19722847fc8c3496d5..0aec8d95c14a603e7b21c0f75ec15f0caa6f6bcb:/taglib.go diff --git a/taglib.go b/taglib.go index 0de37089a7..7ccce15187 100644 --- a/taglib.go +++ b/taglib.go @@ -1,4 +1,8 @@ -package main +// Copyright (C) The Lightning Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + +package lightning import ( "bufio" @@ -47,10 +51,10 @@ func (taglib *tagLibrary) FindAll(buf []byte, fn func(id tagID, pos, taglen int) if !isbase[int(base)] { valid = 0 continue - } else { - valid++ } key = ((key << 2) | twobit[int(base)]) & taglib.keymask + valid++ + if valid < taglib.keylen { continue } else if taginfo, ok := taglib.tagmap[key]; !ok { @@ -69,6 +73,10 @@ func (taglib *tagLibrary) Len() int { return len(taglib.tagmap) } +func (taglib *tagLibrary) TagLen() int { + return taglib.keylen +} + var ( twobit = func() []tagmapKey { r := make([]tagmapKey, 256) @@ -117,3 +125,17 @@ func (taglib *tagLibrary) setTags(tags [][]byte) error { } return nil } + +func (taglib *tagLibrary) Tags() [][]byte { + out := make([][]byte, len(taglib.tagmap)) + untwobit := []byte{'a', 'c', 'g', 't'} + for key, info := range taglib.tagmap { + seq := make([]byte, taglib.keylen) + for i := len(seq) - 1; i >= 0; i-- { + seq[i] = untwobit[int(key)&3] + key = key >> 2 + } + out[int(info.id)] = seq + } + return out +}