summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2024-10-29 18:06:56 -0300
committerEuAndreh <eu@euandre.org>2024-10-29 18:06:56 -0300
commitbf961b081a9bf1904417f9d43ecbf22e5c0f340c (patch)
tree1c61d4e1a1435216ffb08b039fcab056b11c28b0
parentmkdeps.sh: Fix typo on varlist name (diff)
downloadcracha-bf961b081a9bf1904417f9d43ecbf22e5c0f340c.tar.gz
cracha-bf961b081a9bf1904417f9d43ecbf22e5c0f340c.tar.xz
src/cracha.go: Use PoolRunner() and Result type from gobang
-rw-r--r--src/cracha.go95
-rw-r--r--tests/cracha.go20
2 files changed, 2 insertions, 113 deletions
diff --git a/src/cracha.go b/src/cracha.go
index 5547d6e..7a20449 100644
--- a/src/cracha.go
+++ b/src/cracha.go
@@ -1069,97 +1069,6 @@ func unregisterConsumers(queue q.IQueue, consumers []consumerT, prefix string) {
}
}
-type resultT[T any] struct{
- value T
- err error
-}
-
-type taggedT[T any] struct{
- id int
- value T
-}
-
-func startRunner[A any, B any](
- in <-chan taggedT[A],
- out chan<- taggedT[B],
- fn func(A) B,
- done func(),
-) {
- for input := range in {
- out <- taggedT[B]{
- id: input.id,
- value: fn(input.value),
- }
- }
- done()
-}
-
-func makePoolRunner[A any, B any](count int, fn func(A) B) (func(A) B, func()) {
- var wg sync.WaitGroup
- wg.Add(count)
-
- in := make(chan taggedT[A])
- out := make(chan taggedT[B])
-
- for _ = range count {
- go startRunner(in, out, fn, wg.Done)
- }
-
- var mutex sync.Mutex
- m := map[int]chan B{}
- id := 0
- go func() {
- for output := range out {
- mutex.Lock()
- defer mutex.Unlock()
- m[output.id] <- output.value
- close(m[output.id])
- delete(m, output.id)
- }
- }()
-
- poolRunFn := func(input A) B {
- c := make(chan B)
- {
- mutex.Lock()
- defer mutex.Unlock()
- m[id] = c
- id++
- }
-
- in <- taggedT[A]{
- id: id,
- value: input,
- }
- return <- c
- }
-
- close := func() {
- close(in)
- wg.Wait()
- close(out)
- }
-
- return poolRunFn, close
-}
-
-func asResult[A any, B any](fn func(A) (B, error)) func(A) resultT[B] {
- return func(input A) resultT[B] {
- output, err := fn(input)
- return resultT[B]{
- value: output,
- err: err,
- }
- }
-}
-
-func unwrapResult[A any, B any](fn func(A) resultT[B]) func(A) (B, error) {
- return func(input A) (B, error) {
- result := fn(input)
- return result.value, result.err
- }
-}
-
func NewWithPrefix(databasePath string, prefix string) (IAuth, error) {
queue, err := q.New(databasePath)
if err != nil {
@@ -1177,7 +1086,7 @@ func NewWithPrefix(databasePath string, prefix string) (IAuth, error) {
}
numCPU := runtime.NumCPU()
- hasher, closeHasher := makePoolRunner(numCPU, asResult(scrypt.Hash))
+ hasher, closeHasher := g.PoolRunner(numCPU, g.Resultify(scrypt.Hash))
closeFn := func() {
unregisterConsumers(queue, consumers, prefix)
@@ -1188,7 +1097,7 @@ func NewWithPrefix(databasePath string, prefix string) (IAuth, error) {
queue: queue,
db: db,
queries: queries,
- hasher: unwrapResult(hasher),
+ hasher: g.Unresultify(hasher),
close: closeFn,
}
diff --git a/tests/cracha.go b/tests/cracha.go
index 905733c..746242b 100644
--- a/tests/cracha.go
+++ b/tests/cracha.go
@@ -740,22 +740,6 @@ func test_unregisterConsumers() {
// FIXME
}
-func test_startRunner() {
- // FIXME
-}
-
-func test_makePoolRunner() {
- // FIXME
-}
-
-func test_asResult() {
- // FIXME
-}
-
-func test_unwrapResult() {
- // FIXME
-}
-
func test_NewWithPrefix() {
// FIXME
}
@@ -905,10 +889,6 @@ func MainTest() {
test_forgotPasswordRequestHandler()
test_registerConsumers()
test_unregisterConsumers()
- test_startRunner()
- test_makePoolRunner()
- test_asResult()
- test_unwrapResult()
test_NewWithPrefix()
test_New()
test_newUserPayload()