diff options
| author | David Robillard <d@drobilla.net> | 2020-12-26 19:21:17 +0100 | 
|---|---|---|
| committer | David Robillard <d@drobilla.net> | 2020-12-26 19:21:17 +0100 | 
| commit | 882b9446cbf7316345de391188e68c2a7333da5b (patch) | |
| tree | 5baf31e0a28313b380cc7e8694b09a2a517d14f3 /lv2/state | |
| parent | 8d2251749da9e0ae4254502edfc8917236a9b8c0 (diff) | |
| download | lv2-882b9446cbf7316345de391188e68c2a7333da5b.tar.xz | |
Format all code with clang-format
Diffstat (limited to 'lv2/state')
| -rw-r--r-- | lv2/state/state.h | 441 | 
1 files changed, 220 insertions, 221 deletions
| diff --git a/lv2/state/state.h b/lv2/state/state.h index 0de3ee4..55db43b 100644 --- a/lv2/state/state.h +++ b/lv2/state/state.h @@ -55,10 +55,13 @@  extern "C" {  #endif -typedef void* LV2_State_Handle;            ///< Opaque handle for state save/restore -typedef void* LV2_State_Free_Path_Handle;  ///< Opaque handle for state:freePath feature -typedef void* LV2_State_Map_Path_Handle;   ///< Opaque handle for state:mapPath feature -typedef void* LV2_State_Make_Path_Handle;  ///< Opaque handle for state:makePath feature +typedef void* LV2_State_Handle; ///< Opaque handle for state save/restore +typedef void* +  LV2_State_Free_Path_Handle; ///< Opaque handle for state:freePath feature +typedef void* +  LV2_State_Map_Path_Handle; ///< Opaque handle for state:mapPath feature +typedef void* +  LV2_State_Make_Path_Handle; ///< Opaque handle for state:makePath feature  /**     Flags describing value characteristics. @@ -67,52 +70,52 @@ typedef void* LV2_State_Make_Path_Handle;  ///< Opaque handle for state:makePath     (de-)serialise the value data, or whether it is even possible to do so.  */  typedef enum { -	/** -	   Plain Old Data. - -	   Values with this flag contain no pointers or references to other areas -	   of memory.  It is safe to copy POD values with a simple memcpy and store -	   them for the duration of the process.  A POD value is not necessarily -	   safe to trasmit between processes or machines (for example, filenames -	   are POD), see LV2_STATE_IS_PORTABLE for details. - -	   Implementations MUST NOT attempt to copy or serialise a non-POD value if -	   they do not understand its type (and thus know how to correctly do so). -	*/ -	LV2_STATE_IS_POD = 1, - -	/** -	   Portable (architecture independent) data. - -	   Values with this flag are in a format that is usable on any -	   architecture.  A portable value saved on one machine can be restored on -	   another machine regardless of architecture.  The format of portable -	   values MUST NOT depend on architecture-specific properties like -	   endianness or alignment.  Portable values MUST NOT contain filenames. -	*/ -	LV2_STATE_IS_PORTABLE = 1 << 1, - -	/** -	   Native data. - -	   This flag is used by the host to indicate that the saved data is only -	   going to be used locally in the currently running process (for things -	   like instance duplication or snapshots), so the plugin should use the -	   most efficient representation possible and not worry about serialisation -	   and portability. -	*/ -	LV2_STATE_IS_NATIVE = 1 << 2 +  /** +     Plain Old Data. + +     Values with this flag contain no pointers or references to other areas +     of memory.  It is safe to copy POD values with a simple memcpy and store +     them for the duration of the process.  A POD value is not necessarily +     safe to trasmit between processes or machines (for example, filenames +     are POD), see LV2_STATE_IS_PORTABLE for details. + +     Implementations MUST NOT attempt to copy or serialise a non-POD value if +     they do not understand its type (and thus know how to correctly do so). +  */ +  LV2_STATE_IS_POD = 1, + +  /** +     Portable (architecture independent) data. + +     Values with this flag are in a format that is usable on any +     architecture.  A portable value saved on one machine can be restored on +     another machine regardless of architecture.  The format of portable +     values MUST NOT depend on architecture-specific properties like +     endianness or alignment.  Portable values MUST NOT contain filenames. +  */ +  LV2_STATE_IS_PORTABLE = 1 << 1, + +  /** +     Native data. + +     This flag is used by the host to indicate that the saved data is only +     going to be used locally in the currently running process (for things +     like instance duplication or snapshots), so the plugin should use the +     most efficient representation possible and not worry about serialisation +     and portability. +  */ +  LV2_STATE_IS_NATIVE = 1 << 2  } LV2_State_Flags;  /** A status code for state functions. */  typedef enum { -	LV2_STATE_SUCCESS         = 0,  /**< Completed successfully. */ -	LV2_STATE_ERR_UNKNOWN     = 1,  /**< Unknown error. */ -	LV2_STATE_ERR_BAD_TYPE    = 2,  /**< Failed due to unsupported type. */ -	LV2_STATE_ERR_BAD_FLAGS   = 3,  /**< Failed due to unsupported flags. */ -	LV2_STATE_ERR_NO_FEATURE  = 4,  /**< Failed due to missing features. */ -	LV2_STATE_ERR_NO_PROPERTY = 5,  /**< Failed due to missing property. */ -	LV2_STATE_ERR_NO_SPACE    = 6   /**< Failed due to insufficient space. */ +  LV2_STATE_SUCCESS         = 0, /**< Completed successfully. */ +  LV2_STATE_ERR_UNKNOWN     = 1, /**< Unknown error. */ +  LV2_STATE_ERR_BAD_TYPE    = 2, /**< Failed due to unsupported type. */ +  LV2_STATE_ERR_BAD_FLAGS   = 3, /**< Failed due to unsupported flags. */ +  LV2_STATE_ERR_NO_FEATURE  = 4, /**< Failed due to missing features. */ +  LV2_STATE_ERR_NO_PROPERTY = 5, /**< Failed due to missing property. */ +  LV2_STATE_ERR_NO_SPACE    = 6  /**< Failed due to insufficient space. */  } LV2_State_Status;  /** @@ -148,13 +151,12 @@ typedef enum {     The plugin MUST NOT attempt to use this function outside of the     LV2_State_Interface.restore() context.  */ -typedef LV2_State_Status (*LV2_State_Store_Function)( -	LV2_State_Handle handle, -	uint32_t         key, -	const void*      value, -	size_t           size, -	uint32_t         type, -	uint32_t         flags); +typedef LV2_State_Status (*LV2_State_Store_Function)(LV2_State_Handle handle, +                                                     uint32_t         key, +                                                     const void*      value, +                                                     size_t           size, +                                                     uint32_t         type, +                                                     uint32_t         flags);  /**     A host-provided function to retrieve a property. @@ -174,12 +176,11 @@ typedef LV2_State_Status (*LV2_State_Store_Function)(     returns.  The plugin MUST NOT attempt to use this function, or any value     returned from it, outside of the LV2_State_Interface.restore() context.  */ -typedef const void* (*LV2_State_Retrieve_Function)( -	LV2_State_Handle handle, -	uint32_t         key, -	size_t*          size, -	uint32_t*        type, -	uint32_t*        flags); +typedef const void* (*LV2_State_Retrieve_Function)(LV2_State_Handle handle, +                                                   uint32_t         key, +                                                   size_t*          size, +                                                   uint32_t*        type, +                                                   uint32_t*        flags);  /**     LV2 Plugin State Interface. @@ -200,186 +201,184 @@ typedef const void* (*LV2_State_Retrieve_Function)(     with meaningful types to avoid such problems in the future.  */  typedef struct { -	/** -	   Save plugin state using a host-provided `store` callback. - -	   @param instance The instance handle of the plugin. -	   @param store The host-provided store callback. -	   @param handle An opaque pointer to host data which MUST be passed as the -	   handle parameter to `store` if it is called. -	   @param flags Flags describing desired properties of this save.  These -	   flags may be used to determine the most appropriate values to store. -	   @param features Extensible parameter for passing any additional -	   features to be used for this save. - -	   The plugin is expected to store everything necessary to completely -	   restore its state later.  Plugins SHOULD store simple POD data whenever -	   possible, and consider the possibility of state being restored much -	   later on a different machine. - -	   The `handle` pointer and `store` function MUST NOT be used -	   beyond the scope of save(). - -	   This function has its own special threading class: it may not be called -	   concurrently with any "Instantiation" function, but it may be called -	   concurrently with functions in any other class, unless the definition of -	   that class prohibits it (for example, it may not be called concurrently -	   with a "Discovery" function, but it may be called concurrently with an -	   "Audio" function.  The plugin is responsible for any locking or -	   lock-free techniques necessary to make this possible. - -	   Note that in the simple case where state is only modified by restore(), -	   there are no synchronization issues since save() is never called -	   concurrently with restore() (though run() may read it during a save). - -	   Plugins that dynamically modify state while running, however, must take -	   care to do so in such a way that a concurrent call to save() will save a -	   consistent representation of plugin state for a single instant in time. -	*/ -	LV2_State_Status (*save)(LV2_Handle                 instance, -	                         LV2_State_Store_Function   store, -	                         LV2_State_Handle           handle, -	                         uint32_t                   flags, -	                         const LV2_Feature *const * features); - -	/** -	   Restore plugin state using a host-provided `retrieve` callback. - -	   @param instance The instance handle of the plugin. -	   @param retrieve The host-provided retrieve callback. -	   @param handle An opaque pointer to host data which MUST be passed as the -	   handle parameter to `retrieve` if it is called. -	   @param flags Currently unused. -	   @param features Extensible parameter for passing any additional -	   features to be used for this restore. - -	   The plugin MAY assume a restored value was set by a previous call to -	   LV2_State_Interface.save() by a plugin with the same URI. - -	   The plugin MUST gracefully fall back to a default value when a value can -	   not be retrieved.  This allows the host to reset the plugin state with -	   an empty map. - -	   The `handle` pointer and `store` function MUST NOT be used -	   beyond the scope of restore(). - -	   This function is in the "Instantiation" threading class as defined by -	   LV2. This means it MUST NOT be called concurrently with any other -	   function on the same plugin instance. -	*/ -	LV2_State_Status (*restore)(LV2_Handle                  instance, -	                            LV2_State_Retrieve_Function retrieve, -	                            LV2_State_Handle            handle, -	                            uint32_t                    flags, -	                            const LV2_Feature *const *  features); +  /** +     Save plugin state using a host-provided `store` callback. + +     @param instance The instance handle of the plugin. +     @param store The host-provided store callback. +     @param handle An opaque pointer to host data which MUST be passed as the +     handle parameter to `store` if it is called. +     @param flags Flags describing desired properties of this save.  These +     flags may be used to determine the most appropriate values to store. +     @param features Extensible parameter for passing any additional +     features to be used for this save. + +     The plugin is expected to store everything necessary to completely +     restore its state later.  Plugins SHOULD store simple POD data whenever +     possible, and consider the possibility of state being restored much +     later on a different machine. + +     The `handle` pointer and `store` function MUST NOT be used +     beyond the scope of save(). + +     This function has its own special threading class: it may not be called +     concurrently with any "Instantiation" function, but it may be called +     concurrently with functions in any other class, unless the definition of +     that class prohibits it (for example, it may not be called concurrently +     with a "Discovery" function, but it may be called concurrently with an +     "Audio" function.  The plugin is responsible for any locking or +     lock-free techniques necessary to make this possible. + +     Note that in the simple case where state is only modified by restore(), +     there are no synchronization issues since save() is never called +     concurrently with restore() (though run() may read it during a save). + +     Plugins that dynamically modify state while running, however, must take +     care to do so in such a way that a concurrent call to save() will save a +     consistent representation of plugin state for a single instant in time. +  */ +  LV2_State_Status (*save)(LV2_Handle                instance, +                           LV2_State_Store_Function  store, +                           LV2_State_Handle          handle, +                           uint32_t                  flags, +                           const LV2_Feature* const* features); + +  /** +     Restore plugin state using a host-provided `retrieve` callback. + +     @param instance The instance handle of the plugin. +     @param retrieve The host-provided retrieve callback. +     @param handle An opaque pointer to host data which MUST be passed as the +     handle parameter to `retrieve` if it is called. +     @param flags Currently unused. +     @param features Extensible parameter for passing any additional +     features to be used for this restore. + +     The plugin MAY assume a restored value was set by a previous call to +     LV2_State_Interface.save() by a plugin with the same URI. + +     The plugin MUST gracefully fall back to a default value when a value can +     not be retrieved.  This allows the host to reset the plugin state with +     an empty map. + +     The `handle` pointer and `store` function MUST NOT be used +     beyond the scope of restore(). + +     This function is in the "Instantiation" threading class as defined by +     LV2. This means it MUST NOT be called concurrently with any other +     function on the same plugin instance. +  */ +  LV2_State_Status (*restore)(LV2_Handle                  instance, +                              LV2_State_Retrieve_Function retrieve, +                              LV2_State_Handle            handle, +                              uint32_t                    flags, +                              const LV2_Feature* const*   features);  } LV2_State_Interface;  /**     Feature data for state:mapPath (@ref LV2_STATE__mapPath).  */  typedef struct { -	/** -	   Opaque host data. -	*/ -	LV2_State_Map_Path_Handle handle; - -	/** -	   Map an absolute path to an abstract path for use in plugin state. -	   @param handle MUST be the `handle` member of this struct. -	   @param absolute_path The absolute path of a file. -	   @return An abstract path suitable for use in plugin state. - -	   The plugin MUST use this function to map any paths that will be stored -	   in plugin state.  The returned value is an abstract path which MAY not -	   be an actual file system path; absolute_path() MUST be used to map -	   it to an actual path in order to use the file. - -	   Plugins MUST NOT make any assumptions about abstract paths except that -	   they can be mapped back to the absolute path of the "same" file (though -	   not necessarily the same original path) using absolute_path(). - -	   This function may only be called within the context of -	   LV2_State_Interface methods.  The caller must free the returned value -	   with LV2_State_Free_Path.free_path(). -	*/ -	char* (*abstract_path)(LV2_State_Map_Path_Handle handle, -	                       const char*               absolute_path); - -	/** -	   Map an abstract path from plugin state to an absolute path. -	   @param handle MUST be the `handle` member of this struct. -	   @param abstract_path An abstract path (typically from plugin state). -	   @return An absolute file system path. - -	   The plugin MUST use this function in order to actually open or otherwise -	   use any paths loaded from plugin state. - -	   This function may only be called within the context of -	   LV2_State_Interface methods.  The caller must free the returned value -	   with LV2_State_Free_Path.free_path(). -	*/ -	char* (*absolute_path)(LV2_State_Map_Path_Handle handle, -	                       const char*               abstract_path); +  /** +     Opaque host data. +  */ +  LV2_State_Map_Path_Handle handle; + +  /** +     Map an absolute path to an abstract path for use in plugin state. +     @param handle MUST be the `handle` member of this struct. +     @param absolute_path The absolute path of a file. +     @return An abstract path suitable for use in plugin state. + +     The plugin MUST use this function to map any paths that will be stored +     in plugin state.  The returned value is an abstract path which MAY not +     be an actual file system path; absolute_path() MUST be used to map +     it to an actual path in order to use the file. + +     Plugins MUST NOT make any assumptions about abstract paths except that +     they can be mapped back to the absolute path of the "same" file (though +     not necessarily the same original path) using absolute_path(). + +     This function may only be called within the context of +     LV2_State_Interface methods.  The caller must free the returned value +     with LV2_State_Free_Path.free_path(). +  */ +  char* (*abstract_path)(LV2_State_Map_Path_Handle handle, +                         const char*               absolute_path); + +  /** +     Map an abstract path from plugin state to an absolute path. +     @param handle MUST be the `handle` member of this struct. +     @param abstract_path An abstract path (typically from plugin state). +     @return An absolute file system path. + +     The plugin MUST use this function in order to actually open or otherwise +     use any paths loaded from plugin state. + +     This function may only be called within the context of +     LV2_State_Interface methods.  The caller must free the returned value +     with LV2_State_Free_Path.free_path(). +  */ +  char* (*absolute_path)(LV2_State_Map_Path_Handle handle, +                         const char*               abstract_path);  } LV2_State_Map_Path;  /**     Feature data for state:makePath (@ref LV2_STATE__makePath).  */  typedef struct { -	/** -	   Opaque host data. -	*/ -	LV2_State_Make_Path_Handle handle; - -	/** -	   Return a path the plugin may use to create a new file. -	   @param handle MUST be the `handle` member of this struct. -	   @param path The path of the new file within a namespace unique to this -	   plugin instance. -	   @return The absolute path to use for the new file. - -	   This function can be used by plugins to create files and directories, -	   either at state saving time (if this feature is passed to -	   LV2_State_Interface.save()) or any time (if this feature is passed to -	   LV2_Descriptor.instantiate()). - -	   The host MUST do whatever is necessary for the plugin to be able to -	   create a file at the returned path (for example, using fopen()), -	   including creating any leading directories. - -	   If this function is passed to LV2_Descriptor.instantiate(), it may be -	   called from any non-realtime context.  If it is passed to -	   LV2_State_Interface.save(), it may only be called within the dynamic -	   scope of that function call. - -	   The caller must free the returned value with -	   LV2_State_Free_Path.free_path(). -	*/ -	char* (*path)(LV2_State_Make_Path_Handle handle, -	              const char*                path); +  /** +     Opaque host data. +  */ +  LV2_State_Make_Path_Handle handle; + +  /** +     Return a path the plugin may use to create a new file. +     @param handle MUST be the `handle` member of this struct. +     @param path The path of the new file within a namespace unique to this +     plugin instance. +     @return The absolute path to use for the new file. + +     This function can be used by plugins to create files and directories, +     either at state saving time (if this feature is passed to +     LV2_State_Interface.save()) or any time (if this feature is passed to +     LV2_Descriptor.instantiate()). + +     The host MUST do whatever is necessary for the plugin to be able to +     create a file at the returned path (for example, using fopen()), +     including creating any leading directories. + +     If this function is passed to LV2_Descriptor.instantiate(), it may be +     called from any non-realtime context.  If it is passed to +     LV2_State_Interface.save(), it may only be called within the dynamic +     scope of that function call. + +     The caller must free the returned value with +     LV2_State_Free_Path.free_path(). +  */ +  char* (*path)(LV2_State_Make_Path_Handle handle, const char* path);  } LV2_State_Make_Path;  /**     Feature data for state:freePath (@ref LV2_STATE__freePath).  */  typedef struct { -	/** -	   Opaque host data. -	*/ -	LV2_State_Free_Path_Handle handle; - -	/** -	   Free a path returned by a state feature. - -	   @param handle MUST be the `handle` member of this struct. -	   @param path The path previously returned by a state feature. - -	   This function can be used by plugins to free paths allocated by the host -	   and returned by state features (LV2_State_Map_Path.abstract_path(), -	   LV2_State_Map_Path.absolute_path(), and LV2_State_Make_Path.path()). -	*/ -	void (*free_path)(LV2_State_Free_Path_Handle handle, -	                  char*                      path); +  /** +     Opaque host data. +  */ +  LV2_State_Free_Path_Handle handle; + +  /** +     Free a path returned by a state feature. + +     @param handle MUST be the `handle` member of this struct. +     @param path The path previously returned by a state feature. + +     This function can be used by plugins to free paths allocated by the host +     and returned by state features (LV2_State_Map_Path.abstract_path(), +     LV2_State_Map_Path.absolute_path(), and LV2_State_Make_Path.path()). +  */ +  void (*free_path)(LV2_State_Free_Path_Handle handle, char* path);  } LV2_State_Free_Path;  #ifdef __cplusplus |