Skip to content

Source/AWEPlugin/AWEPluginLoader.h

Classes

Name
struct _awe_PluginLoaderMethods
Method table to provide overrides to awe_PluginLoader_initWithMethods.

Source code

/*******************************************************************************
*
*       AudioWeaver Plugins
*       -------------------
*
********************************************************************************
*       AWEPluginLoader.h
********************************************************************************
*
*       Description:    API used to load plugin libraries.
*
*       Copyright:      (c) 2025 DSP Concepts, Inc. All rights reserved.
*                       3235 Kifer Road
*                       Santa Clara, CA 95054
*
*******************************************************************************/

#ifndef AWE_PLUGIN_LOADER_H
#define AWE_PLUGIN_LOADER_H

#include "AWEPluginTypes.h"

#include <stdarg.h>
#include <stdint.h>
#include <stdbool.h>
#include <stddef.h>

#ifndef AWE_PLUGIN_LOADER_MAX_PATH_LENGTH
#define AWE_PLUGIN_LOADER_MAX_PATH_LENGTH (1024)
#endif /* AWE_PLUGIN_LOADER_MAX_PATH_LENGTH */

typedef struct _awe_PluginLoaderMethods
{
    void* (*malloc)(size_t size);
    void* (*realloc)(void* ptr, size_t size);
    void (*free)(void* ptr);
    void* (*open)(const char* file);
    void (*close)(void* handle);
    void* (*sym)(void* handle, const char* name);
    void (*vlog)(int32_t level, uint32_t type, const char* fmt, va_list args);
} awe_PluginLoaderMethods;

enum awe_PluginLoader_Status
{
    AWE_PLUGIN_LOADER_SUCCESS = 0,
    AWE_PLUGIN_LOADER_UNINITIALIZED = -1,
    AWE_PLUGIN_LOADER_ALREADY_INITIALIZED = -2,
    AWE_PLUGIN_LOADER_MISSING_METHOD = -3,
    AWE_PLUGIN_LOADER_ALLOCATION_FAILED = -4,
    AWE_PLUGIN_LOADER_INVALID_INDEX = -5,
    AWE_PLUGIN_LOADER_DL_OPEN_FAILED = -6,
    AWE_PLUGIN_LOADER_DL_SYMBOL_NOT_FOUND = -7,
    AWE_PLUGIN_LOADER_DL_INTERNAL_FAILURE = -8,
    AWE_PLUGIN_LOADER_LIBRARY_FILE_NAME_TOO_LONG = -9,
};

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

enum awe_PluginLoader_Status awe_PluginLoader_init(size_t reserved_count);

enum awe_PluginLoader_Status awe_PluginLoader_initWithMethods(size_t reserved_count, const awe_PluginLoaderMethods* const overrides);

enum awe_PluginLoader_Status awe_PluginLoader_load(const AWEPlugin** plugin, const char* file);

enum awe_PluginLoader_Status awe_PluginLoader_unload(const char* file);

enum awe_PluginLoader_Status awe_PluginLoader_loadWithNamespacePrefix(const AWEPlugin** plugin, const char* file, const char* prefix);

enum awe_PluginLoader_Status awe_PluginLoader_loadWithEntrypoint(const AWEPlugin** plugin, const char* file, const char* entrypoint);

size_t awe_PluginLoader_count();

enum awe_PluginLoader_Status awe_PluginLoader_get(const AWEPlugin** plugin, size_t index);

enum awe_PluginLoader_Status awe_PluginLoader_find(const AWEPlugin** plugin, const char* file);


void awe_PluginLoader_free();

const char* awe_PluginLoader_statusToString(const enum awe_PluginLoader_Status status);

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* AWE_PLUGIN_LOADER_H */