gnunet-svn
[Top][All Lists]
Advanced

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

[gnunet-scheme] 19/324: Define a few missing functions


From: gnunet
Subject: [gnunet-scheme] 19/324: Define a few missing functions
Date: Tue, 21 Sep 2021 13:20:59 +0200

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 70e1632d1c67be7e18f0d33732d219d39630a8c8
Author: Maxime Devos <maximedevos@telenet.be>
AuthorDate: Mon Nov 9 20:16:53 2020 +0100

    Define a few missing functions
---
 gnu/gnunet/metadata.scm | 31 ++++++++++++++++++++++++-------
 1 file changed, 24 insertions(+), 7 deletions(-)

diff --git a/gnu/gnunet/metadata.scm b/gnu/gnunet/metadata.scm
index c7e8f22..777f1d0 100644
--- a/gnu/gnunet/metadata.scm
+++ b/gnu/gnunet/metadata.scm
@@ -54,6 +54,7 @@
          (only (gnu gnunet utils decompress) decompress)
          (only (gnu gnunet utils hat-let) let^)
          (only (srfi srfi-31) rec)
+         (only (srfi srfi-43) vector-unfold)
          (only (srfi srfi-45) delay force))
 
   ;; Meta data item
@@ -260,6 +261,27 @@ Other version numbers are not yet defined."
 0 for NULL."
     (bytevector-u32-ref bv (+ offset 16) (endianness big)))
 
+  (define (vector-insert vec i x)
+    "Insert @var{x} into the vector @var{vec} at offset @var{i}"
+    (vector-unfold (lambda (j)
+                    (cond ((< j i) (vector-ref vec j))
+                          ((= j i) x)
+                          ((> j i) (vector-ref vec (- j 1)))))
+                  (+ 1 (vector-length vec))))
+
+  (define (vector-replace vec i x)
+    "Replace the element at offset @var{i} in @var{vec} by @var{x}"
+    (vector-unfold (lambda (j)
+                    (cond ((= j i) x)
+                          (else (vector-ref vec j))))
+                  (vector-length vec)))
+
+  (define (bv-slice bv offset length)
+    "Copy @var{length} bytes from @var{bv}, starting at @var{offset}."
+    (let ((bv-new (make-bytevector length)))
+      (bytevector-copy! bv offset bv-new 0 length)
+      bv-new))
+
   ;; TODO: bytevector slices
   (define meta-data-deserialize
     (case-lambda
@@ -370,13 +392,8 @@ TODO: perhaps a variant raising conditions may be more 
informative."
              ;; Does not include terminating \0.
              (! plugin-bv
                 (and (> plugin-name-length 0)
-                     (make-bytevector (- plugin-name-length 1))))
-             (_ (if plugin-bv
-                    (bytevector-copy! cdata-bv
-                                      (+ mdata-offset left)
-                                      plugin-bv
-                                      0
-                                      (bytevector-length plugin-bv))))
+                     (bv-slice cdata-bv (+ mdata-offset left)
+                               (- plugin-name-length 1))))
              ;; There isn't any formal requirement for
              ;; being encoded as UTF-8 as far as I know,
              ;; but in practice this will probably be ASCII,

-- 
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]