You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Streamlined automatic C/C++ v8 bindings generator for Node.JS inspired by tolua++ (requires C++11)
Core idea is the ability to easily bind to C/C++ by providing a header-like description of the native interface that is a subset of C++ (format is called Native Interface Description https://github.com/CodeCharmLtd/NID):
Simple things:
int global_variable;
std::string global_function(int a, float b);
structRect {
int x;
int y;
int w;
int h;
};
boolrectangles_intersect(Rect a, Rect b);
More complex things:
#include<stdio.h>int errno; // make errno available as getter and setter// make fopen available and mark FILE* pointers for automatic closing when gced
FILE * [[free(fclose)]] fopen(constchar* filename, constchar* mode);
// make fread available and automatically set one of its argumentssize_tfread(void* ptr [[buffer]], size_t size, size_t nmemb [[set(ptr.length / size)]], FILE* stream [[handle]]);
// tell cbind to mark the object containing pointer as invalidintfclose(FILE* f [[clear_free,unref]]);
Handling pointers to basic types. Contains functions to create pointer values and dereference them.
Binding to global variables with getter/setter.
Binding to global functions.
Type checking that throws exception to javascript in case of unmatched types.
Attributes for specifying automatic free of returned arguments.
Attributes for handling input buffer automatically and passing it to javascript as a return value.
Implemented and initially tested
Handle binary buffers as Buffer.
Handling function pointer types. Function pointers are automatically converted to javascript functions and vice-versa. Function pointer variables as getter/setters and function pointers as arguments are equally handled.
Handling constructors of structs/classes and binding them to javascript new.
Handling class/struct variables and methods.
Passing struct and class pointers to arbitrary functions.
Planned features / Not supported yet
Function overloading.
Attributes for calling native code asynchronously and returning values as promises (bluebird).
Attributes for automatically handling native callbacks that have returned from a separate thread.
Requirements
C++11 support (GCC 4.8 or clang 3.3)
Node 0.8, 0.10 or 0.11.13+
How-to use
npm install --save cbind
Create example.nid file
Put your native interface definition there, for example: