fix crash when copy'ing latent plugins
[ardour.git] / libs / ardour / rdff.h
index ce38d1ff799592c84f63736daf9950c9e0f60868..3d1362cf0e66f861acb543c2243ee2a02f082a5c 100644 (file)
@@ -2,26 +2,17 @@
   RDFF - RDF in RIFF
   Copyright 2011 David Robillard <http://drobilla.net>
 
-  Redistribution and use in source and binary forms, with or without
-  modification, are permitted provided that the following conditions are met:
-
-  1. Redistributions of source code must retain the above copyright notice,
-     this list of conditions and the following disclaimer.
-
-  2. Redistributions in binary form must reproduce the above copyright
-     notice, this list of conditions and the following disclaimer in the
-     documentation and/or other materials provided with the distribution.
-
-  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
-  INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
-  AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-  AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-  OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
-  THE POSSIBILITY OF SUCH DAMAGE.
+  Permission to use, copy, modify, and/or distribute this software for any
+  purpose with or without fee is hereby granted, provided that the above
+  copyright notice and this permission notice appear in all copies.
+
+  THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */
 
 #ifndef RDFF_RDFF_H
 extern "C" {
 #endif
 
+/**
+   RDFF file or stream.
+ */
 typedef struct _RDFF* RDFF;
 
+/**
+   Status codes for function returns.
+*/
 typedef enum {
-       RDFF_STATUS_OK            = 0,
-       RDFF_STATUS_UNKNOWN_ERROR = 1,
-       RDFF_STATUS_EOF           = 2,
-       RDFF_STATUS_CORRUPT       = 3
+       RDFF_STATUS_OK            = 0,  /**< Success. */
+       RDFF_STATUS_UNKNOWN_ERROR = 1,  /**< Unknown error. */
+       RDFF_STATUS_EOF           = 2,  /**< End of file. */
+       RDFF_STATUS_CORRUPT       = 3   /**< Corrupt data. */
 } RDFFStatus;
 
 /**
    Generic RIFF chunk header.
 */
 typedef struct {
-       char     type[4];
-       uint32_t size;
-       char     data[];
+       char     type[4];  /**< Chunk type ID. */
+       uint32_t size;     /**< Size of chunk body (not including header). */
+       char     data[];   /**< Chunk body. */
 } PACKED RDFFChunk;
 
 /**
-   Body of a URID chunk.
+   Body of a RDFF "urid" chunk.
 */
 typedef struct {
-       uint32_t id;
-       char     uri[];
+       uint32_t id;     /**< Numeric ID of URI in this RDFF. */
+       char     uri[];  /**< URI string. */
 } PACKED RDFFURIChunk;
 
 /**
-   Body of a KVAL chunk.
+   Body of a RDFF "trip" chunk.
 */
 typedef struct {
-       uint32_t key;
-       uint32_t type;
-       uint32_t size;
-       char     value[];
-} PACKED RDFFValueChunk;
+       uint32_t subject;      /**< Subject URI ID. */
+       uint32_t predicate;    /**< Predicate URI ID. */
+       uint32_t object_type;  /**< Object type URI ID. */
+       uint32_t object_size;  /**< Size of object data. */
+       char     object[];     /**< Object data. */
+} PACKED RDFFTripleChunk;
 
 /**
    Open/Create a new RDFF file.
@@ -88,18 +86,19 @@ rdff_open(const char* path, bool write);
 RDFFStatus
 rdff_write_uri(RDFF        file,
                uint32_t    id,
-               const char* uri,
-               uint32_t    len);
+               uint32_t    len,
+               const char* uri);
 
 /**
    Write a key/value record to @a file.
 */
 RDFFStatus
-rdff_write_value(RDFF        file,
-                 uint32_t    key,
-                 const void* value,
-                 uint32_t    size,
-                 uint32_t    type);
+rdff_write_triple(RDFF        file,
+                  uint32_t    subject,
+                  uint32_t    predicate,
+                  uint32_t    object_type,
+                  uint32_t    object_size,
+                  const void* object);
 
 /**
    Read a chunk from @a file.
@@ -113,6 +112,18 @@ RDFFStatus
 rdff_read_chunk(RDFF        file,
                 RDFFChunk** buf);
 
+/**
+   Return true iff @a chunk is a URI chunk.
+*/
+bool
+rdff_chunk_is_uri(RDFFChunk* chunk);
+
+/**
+   Return true iff @a chunk is a Triple chunk.
+*/
+bool
+rdff_chunk_is_triple(RDFFChunk* chunk);
+
 /**
    Close @a file.
    After this call, @a file is invalid.