gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnunet-scheme] 01/03: Make uses of 'set%!' less verbose.


From: gnunet
Subject: [gnunet-scheme] 01/03: Make uses of 'set%!' less verbose.
Date: Fri, 11 Feb 2022 20:38:10 +0100

This is an automated email from the git hooks/post-receive script.

maxime-devos pushed a commit to branch master
in repository gnunet-scheme.

commit 81447e9b38e3dbee59709d71c0b571be13bfd4f9
Author: Maxime Devos <maximedevos@telenet.be>
AuthorDate: Fri Feb 11 14:59:38 2022 +0000

    Make uses of 'set%!' less verbose.
    
    * gnu/gnunet/utils/cut-syntax.scm: New module.
    * Makefile.am: Add it.
    * gnu/gnunet/dht/client.scm: Use it.
    * tests/mq.scm: Likewise.
    * tests/network-size.scm: Likewise.
---
 Makefile.am                     |  1 +
 gnu/gnunet/dht/client.scm       | 66 ++++++++++++++++++++---------------------
 gnu/gnunet/utils/cut-syntax.scm | 38 ++++++++++++++++++++++++
 tests/mq.scm                    | 26 ++++++++--------
 tests/network-size.scm          | 21 +++++++------
 5 files changed, 96 insertions(+), 56 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index b42b6cc..dc4b207 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -60,6 +60,7 @@ modules = \
   \
   gnu/gnunet/utils/bv-slice.scm \
   gnu/gnunet/utils/hat-let.scm \
+  gnu/gnunet/utils/cut-syntax.scm \
   gnu/gnunet/utils/netstruct.scm \
   gnu/gnunet/utils/platform-enum.scm \
   gnu/gnunet/utils/tokeniser.scm \
diff --git a/gnu/gnunet/dht/client.scm b/gnu/gnunet/dht/client.scm
index 95aedc8..12bd9d7 100644
--- a/gnu/gnunet/dht/client.scm
+++ b/gnu/gnunet/dht/client.scm
@@ -103,11 +103,13 @@
                slice-length slice/read-only make-slice/read-write slice-copy!
                slice-slice verify-slice-readable)
          (gnu gnunet utils hat-let)
+         (only (gnu gnunet utils cut-syntax)
+               cut-syntax)
          (only (rnrs base)
                and >= = quote * / + - define begin ... let*
                quote case else values apply let cond if >
                <= expt assert exact? integer? lambda for-each
-               not expt min max div-and-mod positive?)
+               not expt min max div-and-mod positive? define-syntax)
          (only (rnrs control)
                unless when)
          (only (rnrs records syntactic)
@@ -399,15 +401,16 @@ slices in @var{old} do not impact the new search result."
       "Create a new @code{/:msg:dht:client:get} message for the query object
  @var{query}, with @var{unique-id} as ‘unique id’ and @var{options} as 
options."
       (define s (make-slice/read-write (sizeof /:msg:dht:client:get '())))
-      (set%! /:msg:dht:client:get '(header size) s (slice-length s))
-      (set%! /:msg:dht:client:get '(header type) s
-            (value->index (symbol-value message-type msg:dht:client:get)))
-      (set%! /:msg:dht:client:get '(options) s options)
-      (set%! /:msg:dht:client:get '(desired-replication-level) s
-            (query-desired-replication-level query))
-      (set%! /:msg:dht:client:get '(type) s (query-type query))
+      (define-syntax set%!/get (cut-syntax set%! /:msg:dht:client:get <> s <>))
+      (set%!/get '(header size) (slice-length s))
+      (set%!/get '(header type)
+                (value->index (symbol-value message-type msg:dht:client:get)))
+      (set%!/get '(options) options)
+      (set%!/get '(desired-replication-level)
+                (query-desired-replication-level query))
+      (set%!/get '(type) (query-type query))
       (slice-copy! (query-key query) (select /:msg:dht:client:get '(key) s))
-      (set%! /:msg:dht:client:get '(unique-id) s unique-id)
+      (set%!/get '(unique-id) unique-id)
       s)
 
     (define* (construct-client-put insertion #:optional (options 0))
@@ -421,17 +424,17 @@ object insertion with @var{options} as options."
         (+ size/header (slice-length (datum-value datum)))))
       (define header (slice-slice message 0 size/header))
       (define rest (slice-slice message size/header))
-      (set%! /:msg:dht:client:put '(header type) header
-            (value->index (symbol-value message-type msg:dht:client:put)))
-      (set%! /:msg:dht:client:put '(header size) header size)
-      (set%! /:msg:dht:client:put '(type) header (datum-type datum))
-      (set%! /:msg:dht:client:put '(option) header options)
-      (set%! /:msg:dht:client:put '(desired-replication-level) header
-            (insertion-desired-replication-level insertion))
-      (set%! /:msg:dht:client:put '(expiration) header (datum-expiration 
datum))
+      (define-syntax set%!/put (cut-syntax set%! /:msg:dht:client:put <> 
header <>))
+      (set%!/put '(header type)
+                (value->index (symbol-value message-type msg:dht:client:put)))
+      (set%!/put '(header size) size)
+      (set%!/put '(type) (datum-type datum))
+      (set%!/put '(option) options)
+      (set%!/put '(desired-replication-level)
+                (insertion-desired-replication-level insertion))
+      (set%!/put '(expiration) (datum-expiration datum))
       ;; Copy key-data pair to insert into the DHT.
-      (slice-copy! (datum-key datum)
-                  (select /:msg:dht:client:put '(key) header))
+      (slice-copy! (datum-key datum) (select /:msg:dht:client:put '(key) 
header))
       (slice-copy! (datum-value datum) rest)
       message)
 
@@ -459,20 +462,17 @@ result object @var{search-result}, with @var{unique-id} 
as ‘unique id’"
             (! message (make-slice/read-write size))
             (! header (slice-slice message 0 size/header))
             (! rest (slice-slice message size/header)))
-           (set%! /:msg:dht:client:result '(header type)
-                  header
-                  (value->index
-                   (symbol-value message-type msg:dht:client:result)))
-           (set%! /:msg:dht:client:result '(header size)
-                  header
-                  size)
-           (set%! /:msg:dht:client:result '(type) header type)
-           (set%! /:msg:dht:client:result '(get-path-length)
-                  header get-path-length)
-           (set%! /:msg:dht:client:result '(put-path-length)
-                  header put-path-length)
-           (set%! /:msg:dht:client:result '(unique-id) header unique-id)
-           (set%! /:msg:dht:client:result '(expiration) header expiration)
+           (define-syntax set%!/result
+             (cut-syntax set%! /:msg:dht:client:result <> header <>))
+           (set%!/result '(header type)
+                         (value->index
+                          (symbol-value message-type msg:dht:client:result)))
+           (set%!/result '(header size) size)
+           (set%!/result '(type) type)
+           (set%!/result '(get-path-length) get-path-length)
+           (set%!/result '(put-path-length) put-path-length)
+           (set%!/result '(unique-id) unique-id)
+           (set%!/result '(expiration) expiration)
            (slice-copy! key (select /:msg:dht:client:result '(key) header))
            ;; TODO: get-path and put path!
            (slice-copy! value rest)
diff --git a/gnu/gnunet/utils/cut-syntax.scm b/gnu/gnunet/utils/cut-syntax.scm
new file mode 100644
index 0000000..bc4ee9d
--- /dev/null
+++ b/gnu/gnunet/utils/cut-syntax.scm
@@ -0,0 +1,38 @@
+;; This file is part of Scheme-GNUnet
+;; Copyright © 2022 GNUnet e.V.
+;;
+;; Scheme-GNUnet is free software: you can redistribute it and/or modify it
+;; under the terms of the GNU Affero General Public License as published
+;; by the Free Software Foundation, either version 3 of the License,
+;; or (at your option) any later version.
+;;
+;; Scheme-GNUnet is distributed in the hope that it will be useful, but
+;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; Affero General Public License for more details.
+;;
+;; You should have received a copy of the GNU Affero General Public License
+;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+;;
+;; SPDX-License-Identifier: AGPL-3.0-or-later
+
+;; TODO: eliminate (gnu gnunet netstruct syntactic), use a compiler pass 
instead
+;; for inlining, then ‘cut-syntax’ can be deprecated in favour of a ‘cut’.
+(define-library (gnu gnunet utils cut-syntax)
+  (export cut-syntax)
+  (import (only (rnrs base) ... begin define-syntax syntax-rules))
+  (begin
+    (define-syntax substitute
+      (syntax-rules (<>)
+       ((_ (substituted ...) (<> . foos) (bar . bars))
+        (substitute (substituted ... bar) foos bars))
+       ((_ (substituted ...) (foo . foos) bars)
+        (substitute (substituted ... foo) foos bars))
+       ((_ (substituted ...) () ())
+        (substituted ...))))
+
+    (define-syntax cut-syntax
+      (syntax-rules ()
+       ((_ . foos)
+        (syntax-rules ()
+          ((_ . bars) (substitute () foos bars))))))))
diff --git a/tests/mq.scm b/tests/mq.scm
index 14d2a27..8d456ac 100644
--- a/tests/mq.scm
+++ b/tests/mq.scm
@@ -1,5 +1,5 @@
 ;; This file is part of GNUnet.
-;; Copyright (C) 2012, 2018, 2021 GNUnet e.V.
+;; Copyright (C) 2012, 2018, 2021, 2022 GNUnet e.V.
 ;;
 ;; GNUnet is free software: you can redistribute it and/or modify it
 ;; under the terms of the GNU Affero General Public License as published
@@ -46,6 +46,7 @@
             (gnu gnunet util struct)
             (gnu gnunet utils bv-slice)
             (gnu gnunet utils hat-let)
+            (gnu gnunet utils cut-syntax)
             ((gnu extractor enum)
              #:select (symbol-value value->index))
             (gnu gnunet message protocols)
@@ -82,11 +83,11 @@ Then each time the index is increased.")
 (define (index->dummy i)
   (let ((s (make-slice/read-write
            (sizeof /:msg:our-test:dummy '()))))
-    (set%! /:msg:our-test:dummy '(header type) s
-          (value->index (symbol-value message-type msg:util:dummy)))
-    (set%! /:msg:our-test:dummy '(header size) s
-          (sizeof /:msg:our-test:dummy '()))
-    (set%! /:msg:our-test:dummy '(index) s i)
+    (define-syntax set%!/dummy (cut-syntax set%! /:msg:our-test:dummy <> s <>))
+    (set%!/dummy '(header type)
+                (value->index (symbol-value message-type msg:util:dummy)))
+    (set%!/dummy '(header size) (sizeof /:msg:our-test:dummy '()))
+    (set%!/dummy '(index) i)
     s))
 
 (define (dummy->index s)
@@ -341,12 +342,13 @@ Then each time the index is increased.")
 (define (make-thread-message thread-index i)
   (let ((s (make-slice/read-write
            (sizeof /:msg:our-test:concurrency '()))))
-    (set%! /:msg:our-test:concurrency '(header type) s
-          (value->index (symbol-value message-type msg:util:dummy)))
-    (set%! /:msg:our-test:concurrency '(header size) s
-          (sizeof /:msg:our-test:concurrency '()))
-    (set%! /:msg:our-test:concurrency '(index) s i)
-    (set%! /:msg:our-test:concurrency '(thread) s thread-index)
+    (define-syntax set%!/concurrency
+      (cut-syntax set%! /:msg:our-test:concurrency <> s <>))
+    (set%!/concurrency
+     '(header type) (value->index (symbol-value message-type msg:util:dummy)))
+    (set%!/concurrency '(header size) (sizeof /:msg:our-test:concurrency '()))
+    (set%!/concurrency '(index) i)
+    (set%!/concurrency '(thread) thread-index)
     s))
 
 (define (decode-thread-message s)
diff --git a/tests/network-size.scm b/tests/network-size.scm
index 0b27d29..8f8e6bb 100644
--- a/tests/network-size.scm
+++ b/tests/network-size.scm
@@ -23,6 +23,7 @@
        (gnu extractor enum)
        (gnu gnunet message protocols)
        (gnu gnunet config db)
+       (gnu gnunet utils cut-syntax)
        (only (rnrs base)
              assert)
        (prefix (gnu gnunet nse client) #{nse:}#)
@@ -103,19 +104,17 @@
   (define (send! estimate)
     (define s (make-slice/read-write
               (sizeof /:msg:nse:estimate '())))
+    (define-syntax set%!/estimate
+      (cut-syntax set%! /:msg:nse:estimate <> s <>))
     ;; Set the headers
-    (set%! /:msg:nse:estimate '(header size) s
-          (sizeof /:msg:nse:estimate '()))
-    (set%! /:msg:nse:estimate '(header type) s
-          (value->index
-           (symbol-value message-type msg:nse:estimate)))
+    (set%!/estimate '(header size) (sizeof /:msg:nse:estimate '()))
+    (set%!/estimate '(header type)
+                   (value->index
+                    (symbol-value message-type msg:nse:estimate)))
     ;; Set the data
-    (set%! /:msg:nse:estimate '(timestamp) s
-          (list-ref estimate 3))
-    (set%! /:msg:nse:estimate '(size-estimate) s
-          (list-ref estimate 0))
-    (set%! /:msg:nse:estimate '(std-deviation) s
-          (list-ref estimate 2))
+    (set%!/estimate '(timestamp) (list-ref estimate 3))
+    (set%!/estimate '(size-estimate) (list-ref estimate 0))
+    (set%!/estimate '(std-deviation) (list-ref estimate 2))
     ;; Send the estimate
     (send-message! mq s))
   (for-each send! %estimates))

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]