move gotd fork into repo. (#111)
- update to latest telegram layer - remove some references to fields in tg.Entities that don't exist in the schema - originally added here: https://github.com/beeper/td/commit/820929062a2ba0104397bc01235ab58a9cff780e - referenced here - https://github.com/mautrix/telegramgo/commit/124f0967ed195b5a380c9bd02e170ada9710dde3 - https://github.com/mautrix/telegramgo/commit/4205047aab2e0639217148b5d125bfaab668bd8e
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
// Package hasher contains Telegram pagination hash implementation.
|
||||
package hasher
|
||||
|
||||
// Hasher implements Telegram pagination hash counting.
|
||||
//
|
||||
// See https://core.telegram.org/api/offsets#hash-generation.
|
||||
type Hasher struct {
|
||||
state uint32
|
||||
}
|
||||
|
||||
// Reset resets the Hasher to its initial state.
|
||||
func (h *Hasher) Reset() {
|
||||
h.state = 0
|
||||
}
|
||||
|
||||
// Update performs state change using given value.
|
||||
func (h *Hasher) Update(value uint32) {
|
||||
h.state = (h.state * 20261) + value
|
||||
}
|
||||
|
||||
// Update64 performs state change using given 64-bit value.
|
||||
func (h *Hasher) Update64(value uint64) {
|
||||
h.Update(uint32(value >> 32))
|
||||
h.Update(uint32(value & 0xFFFFFFFF))
|
||||
}
|
||||
|
||||
// Sum returns final sum.
|
||||
func (h *Hasher) Sum() int64 {
|
||||
return int64(h.state & 0x7FFFFFFF)
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
package hasher
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestHasher(t *testing.T) {
|
||||
hasher := Hasher{}
|
||||
data := []int{7, 5, 16, 8}
|
||||
|
||||
for i := range data {
|
||||
hasher.Update(uint32(data[i]))
|
||||
}
|
||||
|
||||
require.Equal(t, int64(611477280), hasher.Sum())
|
||||
}
|
||||
Reference in New Issue
Block a user