allow to customize variable i/o plugin inputs
[ardour.git] / libs / ardour / rdff.h
index 6e9d1975365b675338afae2d86394087c4e0b600..3d1362cf0e66f861acb543c2243ee2a02f082a5c 100644 (file)
@@ -1,21 +1,18 @@
 /*
   RDFF - RDF in RIFF
   Copyright 2011 David Robillard <http://drobilla.net>
-  This is free software; you can redistribute it and/or modify it
-  under the terms of the GNU General Public License as published by
-  the Free Software Foundation; either version 2 of the License, or
-  (at your option) any later version.
-  This software 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
-  General Public License for more details.
-  You should have received a copy of the GNU General Public License
-  along with this sofware; if not, write to the Free Software
-  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-  02110-1301 USA.
+
+  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.
 */
@@ -82,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.
@@ -107,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.