guix-commits
[Top][All Lists]
Advanced

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

[gnunet] 12/17: Complete the container/metadata bindings.


From: Rémi Birot-Delrue
Subject: [gnunet] 12/17: Complete the container/metadata bindings.
Date: Wed, 12 Aug 2015 18:24:41 +0000

remibd pushed a commit to branch master
in repository gnunet.

commit cb2028f885fe06d18cc531502281842519320ab5
Author: RĂ©mi Birot-Delrue <address@hidden>
Date:   Thu Aug 6 16:44:52 2015 +0200

    Complete the container/metadata bindings.
---
 gnu/gnunet/container/metadata.scm |   68 +++++++++++++++++++++++++++++++++----
 1 files changed, 61 insertions(+), 7 deletions(-)

diff --git a/gnu/gnunet/container/metadata.scm 
b/gnu/gnunet/container/metadata.scm
index 8ea34ba..e9a31e5 100644
--- a/gnu/gnunet/container/metadata.scm
+++ b/gnu/gnunet/container/metadata.scm
@@ -43,7 +43,13 @@
             metadata-set!
             metadata-ref
             metadata-iterate
-            metadata-map))
+            metadata-map
+
+            metadata-copy
+            metadata-equal?
+            metadata-clear!
+            metadata-add-publication-date!
+            ))
 
 
 (define-record-type <metadata>
@@ -68,7 +74,8 @@
              #:unknown)))
 
 (define metadata-type-alist
-  '((#:unknown           .  45)
+  '((#:publication-date  .  24)
+    (#:unknown           .  45)
     (#:original-filename . 180)))
 
 (define (metadata-type->integer type)
@@ -83,6 +90,9 @@
 (define-gnunet %metadata-create
   "GNUNET_CONTAINER_meta_data_create" : '() -> '*)
 
+(define-gnunet %metadata-duplicate
+  "GNUNET_CONTAINER_meta_data_duplicate" : '(*) -> '*)
+
 (define %metadata-destroy
   (dynamic-func "GNUNET_CONTAINER_meta_data_destroy" gnunet-util-ffi))
 
@@ -90,11 +100,26 @@
   "GNUNET_CONTAINER_meta_data_insert" :
   (list '* '* unsigned-int unsigned-int '* '* size_t) -> int)
 
-(define-gnunet %metadata-get-by-type
-  "GNUNET_CONTAINER_meta_data_get_by_type" : (list '* unsigned-int) -> '*)
+(define-gnunet %metadata-test-equal
+  "GNUNET_CONTAINER_meta_data_test_equal" : '(* *) -> int)
+
+(define-gnunet %metadata-merge
+  "GNUNET_CONTAINER_meta_data_merge" : '(* *) -> void)
+
+(define-gnunet %metadata-delete
+  "GNUNET_CONTAINER_meta_data_delete" : (list '* unsigned-int '* size_t) -> 
int)
+
+(define-gnunet %metadata-clear
+  "GNUNET_CONTAINER_meta_data_clear" : '(*) -> void)
+
+(define-gnunet %metadata-add-publication-date
+  "GNUNET_CONTAINER_meta_data_add_publication_date" : '(*) -> void)
 
 (define-gnunet %metadata-iterate
-  "GNUNET_CONTAINER_meta_data_iterate" : (list '* '* '*) -> int)
+  "GNUNET_CONTAINER_meta_data_iterate" : '(* * *) -> int)
+
+(define-gnunet %metadata-get-by-type
+  "GNUNET_CONTAINER_meta_data_get_by_type" : (list '* unsigned-int) -> '*)
 
 
 (define* (wrap-metadata pointer #:key (finalize #f))
@@ -102,8 +127,8 @@
     (set-pointer-finalizer! pointer %metadata-destroy))
   (%wrap-metadata pointer))
 
-(define (make-metadata)
-  (wrap-metadata (%metadata-create)))
+(define* (make-metadata #:key (finalize #t))
+  (wrap-metadata (%metadata-create) #:finalize finalize))
 
 (define-record-type <metadata-item>
   (make-metadata-item name type format mime-type data)
@@ -161,3 +186,32 @@ where plugin-name is a string,
                         0)
                       metadata)
     (reverse result)))
+
+;;; utility functions
+
+(define* (metadata-copy meta #:key (finalize #t))
+  "Return a newly created copy of META."
+  (let ((ptr (%metadata-duplicate (unwrap-metadata meta))))
+    (when (eq? %null-pointer ptr)
+      (throw 'invalid-result "metadata-copy" "%metadata-duplicate" 
%null-pointer))
+    (wrap-metadata ptr #:finalize finalize)))
+
+(define (metadata-equal? m n)
+  "Test if to metadata are equal: two metadata are considered equal if the
+meta-types, formats and content match (mime-types and plugin names aren’t
+considered)."
+  (int->bool (%metadata-test-equal (unwrap-metadata m) (unwrap-metadata n))))
+    
+;;+TODO: metadata-merge
+
+;;+TODO: metadata-delete
+
+(define (metadata-clear! m)
+  "Remove all items in the metadata."
+  (%metadata-clear (unwrap-metadata m)))
+
+(define (metadata-add-publication-date! m)
+  "Add the current time as the publication date to the metadata."
+  (%metadata-add-publication-date (unwrap-metadata m)))
+
+



reply via email to

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