gnunet-svn
[Top][All Lists]
Advanced

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

[gnunet-scheme] 97/324: utils: bv-slice: Define a record printer.


From: gnunet
Subject: [gnunet-scheme] 97/324: utils: bv-slice: Define a record printer.
Date: Tue, 21 Sep 2021 13:22:17 +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 442c18e35e874ad707b0f1242286e53836aba0cd
Author: Maxime Devos <maximedevos@telenet.be>
AuthorDate: Sun Mar 21 16:50:50 2021 +0100

    utils: bv-slice: Define a record printer.
    
    * gnu/gnunet/utils/bv-slice.scm
      (print-slice): Define a procedure for printing slices to a port
      and use it as the record printer for slices.
---
 gnu/gnunet/utils/bv-slice.scm | 35 ++++++++++++++++++++++++++++++++++-
 1 file changed, 34 insertions(+), 1 deletion(-)

diff --git a/gnu/gnunet/utils/bv-slice.scm b/gnu/gnunet/utils/bv-slice.scm
index 7d13b08..5dcfd66 100644
--- a/gnu/gnunet/utils/bv-slice.scm
+++ b/gnu/gnunet/utils/bv-slice.scm
@@ -52,7 +52,12 @@
          (rnrs bytevectors)
          (rnrs control)
          (rnrs records syntactic)
-         (srfi srfi-31))
+         (srfi srfi-31)
+         ;; only for printing records
+         (only (rnrs io ports)
+               put-char put-string)
+         (only (srfi srfi-9 gnu)
+               set-record-type-printer!))
   
   ;; Slicing
 
@@ -67,6 +72,34 @@
     (opaque #t)
     (sealed #t))
 
+  ;; Not set in stone.  Override the record printer to
+  ;; avoid printing large bytevectors and instead only
+  ;; print the sliced part.
+  (define (print-slice slice port)
+    (put-string port "#<slice (")
+    (put-string port
+               (cond ((and (slice-readable? slice)
+                           (slice-writable? slice))
+                      "CAP_READ | CAP_WRITE")
+                     ((slice-readable? slice)
+                      "CAP_READ")
+                     ((slice-writable? slice)
+                      "CAP_WRITE")
+                     (#t
+                      "0")))
+    (put-string port "):")
+    (let ((bv (slice-bv slice))
+         (end (+ (slice-offset slice)
+                 (slice-length slice))))
+      (let loop ((i (slice-offset slice)))
+       (if (< i end)
+           (let ((val (bytevector-u8-ref bv i)))
+             (put-char port #\ )
+             (put-string port (number->string val))
+             (loop (+ i 1))))))
+    (put-char port #\>))
+  (set-record-type-printer! <slice> print-slice)
+
   (define slice-slice
     (case-lambda
       "Select a part of the slice, preserving capabilities"

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