mirror of
https://github.com/tuneinsight/lattigo.git
synced 2025-09-13 03:27:14 +00:00
[structs]: added generic copynew
This commit is contained in:
@@ -14,10 +14,29 @@ import (
|
||||
// Map is a struct storing a map of any element indexed by an Integer.
|
||||
type Map[V constraints.Integer, T any] map[V]*T
|
||||
|
||||
// CopyNew creates a copy of the oject.
|
||||
func (m Map[V, T]) CopyNew() *Map[V, T] {
|
||||
|
||||
var mcpy = make(Map[V, T])
|
||||
|
||||
codec := Codec[T]{}
|
||||
|
||||
var err error
|
||||
for key, object := range m {
|
||||
if mcpy[key], err = codec.CopynewWrapper(object); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
return &mcpy
|
||||
}
|
||||
|
||||
// BinarySize returns the size in bytes that the object once marshalled into a binary form.
|
||||
func (m Map[V, T]) BinarySize() (size int) {
|
||||
size = 4 // #Ct
|
||||
|
||||
codec := Codec[T]{}
|
||||
|
||||
var inc int
|
||||
var err error
|
||||
for _, v := range m {
|
||||
@@ -49,6 +68,8 @@ func (m *Map[V, T]) Read(p []byte) (n int, err error) {
|
||||
return n, fmt.Errorf("cannot Read: len(p)=%d < %d", len(p), m.BinarySize())
|
||||
}
|
||||
|
||||
codec := Codec[T]{}
|
||||
|
||||
mi := *m
|
||||
|
||||
binary.LittleEndian.PutUint32(p[n:], uint32(len(mi)))
|
||||
@@ -92,6 +113,8 @@ func (m *Map[V, T]) WriteTo(w io.Writer) (n int64, err error) {
|
||||
|
||||
n += int64(inc1)
|
||||
|
||||
codec := Codec[T]{}
|
||||
|
||||
for _, key := range utils.GetSortedKeys(mi) {
|
||||
|
||||
if inc1, err = buffer.WriteUint64(w, uint64(key)); err != nil {
|
||||
@@ -131,6 +154,8 @@ func (m *Map[V, T]) Write(p []byte) (n int, err error) {
|
||||
size := int(binary.LittleEndian.Uint32(p[n:]))
|
||||
n += 4
|
||||
|
||||
codec := Codec[T]{}
|
||||
|
||||
for i := 0; i < size; i++ {
|
||||
|
||||
idx := V(binary.LittleEndian.Uint64(p[n:]))
|
||||
@@ -173,6 +198,8 @@ func (m *Map[V, T]) ReadFrom(r io.Reader) (n int64, err error) {
|
||||
|
||||
n += int64(inc1)
|
||||
|
||||
codec := Codec[T]{}
|
||||
|
||||
for i := 0; i < int(size); i++ {
|
||||
|
||||
var key uint64
|
||||
|
||||
Reference in New Issue
Block a user