Rework C API shim. Now bridges: librngxx (main library C++ interface) @ rngxx.hpp -> >|capi-bridge.cpp <-> capi-bridge.h <-> capi.c|> -> rngxx.h
Fortune for rngxx's current commit: Small blessing − 小吉capi
parent
8cdc9648a0
commit
c38d58b7fe
@ -0,0 +1,19 @@
|
|||||||
|
// Contains the work-doing code for the C API interface, which should be exported to the C API shim in the header "capi-bridge.h"
|
||||||
|
|
||||||
|
#include <rngxx.hpp>
|
||||||
|
#include <rngxx/crand.h>
|
||||||
|
|
||||||
|
#include "capi-bridge.h"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
_export(internal)
|
||||||
|
rng_t* RNG_IMPL(mkdriver)(rng_kind kind, u64* restrict seed)
|
||||||
|
{
|
||||||
|
switch(kind)
|
||||||
|
{
|
||||||
|
case RNG_KIND_CRAND:
|
||||||
|
return new rng::crand(seed[0]);
|
||||||
|
default: return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
// Bridges the working TU `capi-bridge.cpp`, which handles interfacing with rngxx's C++ API, and the C API shim TU defined in `capi.c`
|
||||||
|
// This file must be useable by both C and C++ compilers, and everything here must have C linkage
|
||||||
|
//
|
||||||
|
// Other headers shouldn't be included here. The only ones included are included for the types they define
|
||||||
|
#ifndef _RNG_CAPI_BRIDGE_H
|
||||||
|
#define _RNG_CAPI_BRIDGE_H
|
||||||
|
|
||||||
|
#define _RNGXX_IMPL_ONLY_TYPES
|
||||||
|
#include <rngxx.h>
|
||||||
|
#undef _RNGXX_IMPL_ONLY_TYPES
|
||||||
|
#include <common.h>
|
||||||
|
|
||||||
|
#define RNG_IMPL(name) _rng__internal_ ## name
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
rng_t* RNG_IMPL(mkdriver)(enum rng_kind kind, u64* restrict seed) _export(internal);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _RNG_CAPI_BRIDGE_H */
|
@ -0,0 +1,11 @@
|
|||||||
|
// Contains the library exported C API functions.
|
||||||
|
// Actual work may be done in `capi-bridge.cpp`, `capi-bridge.h` bridges this shim TU with that working one
|
||||||
|
|
||||||
|
#include <rngxx.h>
|
||||||
|
|
||||||
|
#include "capi-bridge.h"
|
||||||
|
|
||||||
|
rng_t* rng_new(enum rng_kind kind, u64 seed[static restrict 1])
|
||||||
|
{
|
||||||
|
return RNG_IMPL(mkdriver) (kind, &seed[0]);
|
||||||
|
}
|
@ -1,17 +0,0 @@
|
|||||||
#include <rngxx.hpp>
|
|
||||||
#include <rngxx/crand.h>
|
|
||||||
|
|
||||||
#include <rngxx.h>
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
//TODO: Make these C++ compiled ones intermediate, so the C interface used here can be used. use internal linkage for the C++ intermediates
|
|
||||||
rng_t* rng_new(rng_kind kind, u64 seed[static restrict 1])
|
|
||||||
{
|
|
||||||
switch(kind)
|
|
||||||
{
|
|
||||||
case RNG_KIND_CRAND:
|
|
||||||
return new rng::crand(seed[0]);
|
|
||||||
default: return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in new issue