/
uzer_007
/
Rixea
Обзор
Документация
Войти
/
uzer_007
/
Rixea
Код
Запросы
0
Задачи
Вики
Пакеты
5
Релизы
2
CI/CD
Аналитика
Безопасность
master
modules/packages/hashed_buffer.go
83 строки
2 KB
uzer_007
feat: первая версия Rixea
02 авг 2026, 22:16
02 авг 2026, 22:16
d4f7504
Код
Авторство
О чём код?
// Copyright 2026 Uzer_007. All rights reserved. // SPDX-License-Identifier: MIT package packages import ( "io" "gitverse.ru/uzer_007/Rixea/modules/setting" "gitverse.ru/uzer_007/Rixea/modules/util/filebuffer" ) // HashedSizeReader provide methods to read, sum hashes and a Size method type HashedSizeReader interface { io.Reader HashSummer Size() int64 } // HashedBuffer is buffer which calculates multiple checksums type HashedBuffer struct { *filebuffer.FileBackedBuffer hash *MultiHasher combinedWriter io.Writer } const DefaultMemorySize = 32 * 1024 * 1024 // NewHashedBuffer creates a hashed buffer with the default memory size func NewHashedBuffer() (*HashedBuffer, error) { return NewHashedBufferWithSize(DefaultMemorySize) } // NewHashedBufferWithSize creates a hashed buffer with a specific memory size func NewHashedBufferWithSize(maxMemorySize int) (*HashedBuffer, error) { tempDir, err := setting.AppDataTempDir("package-hashed-buffer").MkdirAllSub("") if err != nil { return nil, err } b := filebuffer.New(maxMemorySize, tempDir) hash := NewMultiHasher() combinedWriter := io.MultiWriter(b, hash) return &HashedBuffer{ b, hash, combinedWriter, }, nil } // CreateHashedBufferFromReader creates a hashed buffer with the default memory size and copies the provided reader data into it. func CreateHashedBufferFromReader(r io.Reader) (*HashedBuffer, error) { return CreateHashedBufferFromReaderWithSize(r, DefaultMemorySize) } // CreateHashedBufferFromReaderWithSize creates a hashed buffer and copies the provided reader data into it. func CreateHashedBufferFromReaderWithSize(r io.Reader, maxMemorySize int) (*HashedBuffer, error) { b, err := NewHashedBufferWithSize(maxMemorySize) if err != nil { return nil, err } _, err = io.Copy(b, r) if err != nil { _ = b.Close() return nil, err } return b, nil } // Write implements io.Writer func (b *HashedBuffer) Write(p []byte) (int, error) { return b.combinedWriter.Write(p) } // Sums gets the MD5, SHA1, SHA256 and SHA512 checksums of the data func (b *HashedBuffer) Sums() (hashMD5, hashSHA1, hashSHA256, hashSHA512 []byte) { return b.hash.Sums() }