本文整理匯總了Golang中github.com/richardlehane/siegfried/pkg/core/siegreader.Buffer.Slice方法的典型用法代碼示例。如果您正苦於以下問題:Golang Buffer.Slice方法的具體用法?Golang Buffer.Slice怎麽用?Golang Buffer.Slice使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類github.com/richardlehane/siegfried/pkg/core/siegreader.Buffer
的用法示例。
在下文中一共展示了Buffer.Slice方法的4個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: identifyRdr
func identifyRdr(w writer, s *siegfried.Siegfried, r io.Reader, sz int64, path, mime, mod string) {
lg.set(path)
c, err := s.Identify(r, path, mime)
lg.err(err)
if c == nil {
w.writeFile(path, sz, mod, nil, err, nil)
lg.reset()
return
}
var b *siegreader.Buffer
var cs []byte
if checksum != nil {
b = s.Buffer()
var i int64
l := checksum.BlockSize()
for ; ; i += int64(l) {
buf, _ := b.Slice(i, l)
if buf == nil {
break
}
checksum.Write(buf)
}
cs = checksum.Sum(nil)
checksum.Reset()
}
a := w.writeFile(path, sz, mod, cs, err, idChan(c))
lg.reset()
if !*archive || a == config.None {
return
}
var d decompressor
if b == nil {
b = s.Buffer()
}
switch a {
case config.Zip:
d, err = newZip(siegreader.ReaderFrom(b), path, sz)
case config.Gzip:
d, err = newGzip(b, path)
case config.Tar:
d, err = newTar(siegreader.ReaderFrom(b), path)
case config.ARC:
d, err = newARC(siegreader.ReaderFrom(b), path)
case config.WARC:
d, err = newWARC(siegreader.ReaderFrom(b), path)
}
if err != nil {
writeError(w, path, sz, mod, fmt.Errorf("failed to decompress, got: %v", err))
return
}
for err = d.next(); err == nil; err = d.next() {
if *droido {
for _, v := range d.dirs() {
w.writeFile(v, -1, "", nil, nil, nil)
}
}
identifyRdr(w, s, d.reader(), d.size(), d.path(), d.mime(), d.mod())
}
}
示例2: index
func (fs *frameSet) index(buf *siegreader.Buffer, rev bool, quit chan struct{}) chan fsmatch {
ret := make(chan fsmatch)
go func() {
var i int
for {
select {
case <-quit:
close(ret)
return
default:
}
if i >= len(fs.set) {
close(ret)
return
}
f := fs.set[i]
var match bool
var matches []int
if rev {
slc, err := buf.EofSlice(0, frames.TotalLength(f))
if err != nil {
close(ret)
return
}
match, matches = f.MatchR(slc)
} else {
slc, err := buf.Slice(0, frames.TotalLength(f))
if err != nil {
close(ret)
return
}
match, matches = f.Match(slc)
}
if match {
var min int
if !rev {
min, _ = f.Length()
}
for _, off := range matches {
ret <- fsmatch{i, int64(off - min), min}
}
}
i++
}
close(ret)
}()
return ret
}
示例3: Identify
func (m Matcher) Identify(n string, b siegreader.Buffer) (chan core.Result, error) {
res := make(chan core.Result)
// check trigger
buf, err := b.Slice(0, 8)
if err != nil {
close(res)
return res, nil
}
for _, c := range m {
if c.trigger(buf) {
rdr, err := c.rdr(b)
if err != nil {
close(res)
return res, err
}
go c.identify(n, rdr, res)
return res, nil
}
}
// nothing ... move on
close(res)
return res, nil
}
示例4: scorer
//.........這裏部分代碼省略.........
}
if v.r {
checkr = true
}
}
}
if !checkl && !checkr {
return res
}
// calculate the offset and lengths for the left and right test slices
var lslc, rslc []byte
var lpos, rpos int64
var llen, rlen int
if st.reverse {
lpos, llen = st.offset+int64(st.length), t.maxLeftDistance
rpos, rlen = st.offset-int64(t.maxRightDistance), t.maxRightDistance
if rpos < 0 {
rlen = rlen + int(rpos)
rpos = 0
}
} else {
lpos, llen = st.offset-int64(t.maxLeftDistance), t.maxLeftDistance
rpos, rlen = st.offset+int64(st.length), t.maxRightDistance
if lpos < 0 {
llen = llen + int(lpos)
lpos = 0
}
}
// the partials slice has a mirror entry for each of the testTree incompletes
partials := make([]partial, len(t.incomplete))
// test left (if there are valid left tests to try)
if checkl {
if st.reverse {
lslc, _ = buf.EofSlice(lpos, llen)
} else {
lslc, _ = buf.Slice(lpos, llen)
}
left := matchTestNodes(t.left, lslc, true)
for _, lp := range left {
if partials[lp.followUp].l {
partials[lp.followUp].ldistances = append(partials[lp.followUp].ldistances, lp.distances...)
} else {
partials[lp.followUp].l = true
partials[lp.followUp].ldistances = lp.distances
}
}
}
// test right (if there are valid right tests to try)
if checkr {
if st.reverse {
rslc, _ = buf.EofSlice(rpos, rlen)
} else {
rslc, _ = buf.Slice(rpos, rlen)
}
right := matchTestNodes(t.right, rslc, false)
for _, rp := range right {
if partials[rp.followUp].r {
partials[rp.followUp].rdistances = append(partials[rp.followUp].rdistances, rp.distances...)
} else {
partials[rp.followUp].r = true
partials[rp.followUp].rdistances = rp.distances
}
}
}
// now iterate through the partials, checking whether they fulfil any of the incompletes
for i, p := range partials {