diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2022-07-13 21:44:18 -0600 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2022-07-13 21:44:18 -0600 |
commit | 296e9fc0f8812ce0c5684ff99f84e80eef07cd4c (patch) | |
tree | f2c0219b5a5db0603af6c55acb6f1684742989fd /lib/util/ref.go | |
parent | 436e1681c9fcda246c6d84526fc79c87adc7b28d (diff) |
Move files to different packages [ci-skip]
Diffstat (limited to 'lib/util/ref.go')
-rw-r--r-- | lib/util/ref.go | 58 |
1 files changed, 0 insertions, 58 deletions
diff --git a/lib/util/ref.go b/lib/util/ref.go deleted file mode 100644 index fe284d7..0000000 --- a/lib/util/ref.go +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright (C) 2022 Luke Shumaker <lukeshu@lukeshu.com> -// -// SPDX-License-Identifier: GPL-2.0-or-later - -package util - -import ( - "fmt" - "io" - - "git.lukeshu.com/btrfs-progs-ng/lib/binstruct" -) - -type File[A ~int64] interface { - Name() string - Size() (A, error) - ReadAt(p []byte, off A) (n int, err error) - WriteAt(p []byte, off A) (n int, err error) -} - -var ( - _ io.WriterAt = File[int64](nil) - _ io.ReaderAt = File[int64](nil) -) - -type Ref[A ~int64, T any] struct { - File File[A] - Addr A - Data T -} - -func (r *Ref[A, T]) Read() error { - size := binstruct.StaticSize(r.Data) - buf := make([]byte, size) - if _, err := r.File.ReadAt(buf, r.Addr); err != nil { - return err - } - n, err := binstruct.Unmarshal(buf, &r.Data) - if err != nil { - return err - } - if n != size { - return fmt.Errorf("util.Ref[%T].Read: left over data: read %v bytes but only consumed %v", - r.Data, size, n) - } - return nil -} - -func (r *Ref[A, T]) Write() error { - buf, err := binstruct.Marshal(r.Data) - if err != nil { - return err - } - if _, err = r.File.WriteAt(buf, r.Addr); err != nil { - return err - } - return nil -} |