本文整理汇总了C++中enif_make_int函数的典型用法代码示例。如果您正苦于以下问题:C++ enif_make_int函数的具体用法?C++ enif_make_int怎么用?C++ enif_make_int使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了enif_make_int函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: nif_api_version
static ERL_NIF_TERM nif_api_version(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
/*ADD_CALL("nif_api_version");*/
return enif_make_tuple2(env,
enif_make_int(env, ERL_NIF_MAJOR_VERSION),
enif_make_int(env, ERL_NIF_MINOR_VERSION));
}
示例2: send_list_seq
static ERL_NIF_TERM send_list_seq(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
ErlNifPid to;
ERL_NIF_TERM msg;
ErlNifEnv* msg_env;
int i, res;
if (!enif_get_int(env, argv[0], &i)) {
return enif_make_badarg(env);
}
if (argv[1] == atom_self) {
enif_self(env, &to);
}
else if (!enif_get_local_pid(env, argv[1], &to)) {
return enif_make_badarg(env);
}
msg_env = enif_alloc_env();
msg = enif_make_list(msg_env,0);
for ( ; i>0 ; i--) {
msg = enif_make_list_cell(msg_env, enif_make_int(msg_env, i), msg);
}
res = enif_send(env, &to, msg_env, msg);
enif_free_env(msg_env);
return enif_make_tuple2(env, atom_ok, enif_make_int(env,res));
}
示例3: update
//key, incr, ttl, timestamp
static ERL_NIF_TERM update(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) {
int ttl=0, timestamp=0, incr=0, next=0;
CHECK(enif_get_string(env, argv[0], keybuff, KEY_MAX_LEN, ERL_NIF_LATIN1));
CHECK(enif_get_int(env, argv[1], &incr));
CHECK(enif_get_int(env, argv[2], &ttl));
CHECK(enif_get_int(env, argv[3], ×tamp));
metronome_item * item = find_in_hash(keybuff, timestamp);
item->ttl = ttl;
if(item->timestamp + ttl > timestamp) {
item->value += incr;
next = item->timestamp + ttl - timestamp;
} else {
item->value = incr;
item->timestamp = timestamp;
next = ttl;
}
//
return enif_make_tuple3(env,
enif_make_atom(env, "ok"),
enif_make_int(env, item->value),
enif_make_int(env, next)
);
}
示例4: _open
static ERL_NIF_TERM
_open(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
CAN_handle* handle;
ERL_NIF_TERM result;
char dev_path[512];
if (!enif_get_string(env, argv[0], dev_path, 512, ERL_NIF_LATIN1))
return enif_make_int(env, -2000);
handle = enif_alloc_resource(CAN_handle_type, sizeof(CAN_handle));
memset(handle, 0, sizeof(CAN_handle));
handle->device = open((const char*)dev_path, O_RDWR | O_SYNC);
if (!enif_get_int(env, argv[1], &handle->raw))
return enif_make_int(env, -2001);
handle->threaded = 0;
if (handle->device >= 0)
{
int len = strlen(dev_path);
result = enif_make_resource(env, handle);
handle->devpath = enif_alloc(len);
memcpy(handle->devpath, dev_path, len);
handle->devpath_bin = enif_make_resource_binary(env, handle, handle->devpath, len);
}
else
{
result = enif_make_int(env, errno);
}
enif_release_resource(handle);
return result;
}
示例5: _listener
static ERL_NIF_TERM
_listener (ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
CAN_handle* handle;
ErlNifPid pid = { 0 }; // NOTE: breaking opaque type!
enif_get_resource(env, argv[0], CAN_handle_type, (void**) &handle);
if (handle->threaded) // there is a thread already and some pid!
{
pid = handle->receiver;
}
if (!enif_get_local_pid(env, argv[1], &handle->receiver)) // NOTE: use lock if pid type is structural!
{
handle->threaded = 0;
return enif_make_badarg(env);
}
else
{
enif_get_uint(env, argv[2], &handle->chunk_size);
enif_get_long(env, argv[3], &handle->timeout);
if (!handle->threaded) // a thread was not created already
{
if (enif_thread_create("can_reading_thread",
&handle->tid,
_reading_thread,
handle, 0))
{
handle->threaded = 0;
return enif_make_int(env, -1004);
}
}
}
return pid.pid ? enif_make_pid(env, &pid) : enif_make_int(env, 0);
}
示例6: mres
//
// build result for re2:match
//
static ERL_NIF_TERM mres(ErlNifEnv* env,
const re2::StringPiece& str,
const re2::StringPiece& match,
const matchoptions::capture_type ct)
{
switch (ct) {
case matchoptions::CT_BINARY:
ErlNifBinary bmatch;
if(!enif_alloc_binary(match.size(), &bmatch))
return a_err_alloc_binary;
memcpy(bmatch.data, match.data(), match.size());
return enif_make_binary(env, &bmatch);
default:
case matchoptions::CT_INDEX:
int l, r;
if (match.empty()) {
l = -1;
r = 0;
} else {
l = match.data() - str.data();
r = match.size();
}
return enif_make_tuple2(env,
enif_make_int(env, l),
enif_make_int(env, r));
}
}
示例7: _load
static ERL_NIF_TERM _load(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]){
UNUSED(argc);
ErlNifBinary in,out;
struct jpeg_decompress_struct cinfo;
struct error_mgr jerr;
unsigned int width, height;
enif_inspect_binary(env,argv[0],&in);
cinfo.err = jpeg_std_error(&jerr.pub);
jerr.pub.error_exit = error_exit;
if (setjmp(jerr.setjmp_buffer)) {
jpeg_destroy_decompress(&cinfo);
return -1;
}
jpeg_create_decompress(&cinfo);
jpeg_mem_src(&cinfo, in.data, in.size);
jpeg_read_header (&cinfo, TRUE);
width = cinfo.image_width;
height = cinfo.image_height;
enif_alloc_binary(width*height*3,&out);
cinfo.do_block_smoothing = TRUE;
cinfo.do_fancy_upsampling = TRUE;
cinfo.out_color_space = JCS_RGB;
jpeg_start_decompress(&cinfo);
JSAMPROW rowp[1];
unsigned long location = 0;
rowp[0] = (unsigned char*) malloc(cinfo.output_width*cinfo.num_components);
unsigned int i = 0;
while (cinfo.output_scanline < cinfo.output_height){
jpeg_read_scanlines(&cinfo, rowp, 1);
for( i=0; i<cinfo.image_width*cinfo.num_components;i++)
out.data[location++] = rowp[0][i];
}
free(rowp[0]);
jpeg_finish_decompress (&cinfo);
jpeg_destroy_decompress (&cinfo);
return enif_make_tuple2(env,
enif_make_atom(env,"ok"),
enif_make_tuple3(env,
enif_make_int(env,width),
enif_make_int(env,height),
enif_make_binary(env, &out)
)
);
}
示例8: geef_library_version
ERL_NIF_TERM geef_library_version(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[])
{
int major, minor, rev;
git_libgit2_version(&major, &minor, &rev);
return enif_make_tuple3(env, enif_make_int(env, major), enif_make_int(env, minor), enif_make_int(env, rev));
}
示例9: _receive_can_messages
static ERL_NIF_TERM
_receive_can_messages (ErlNifEnv* env,
CAN_handle* handle,
unsigned int chunk_size,
long timeout)
{
int length = 0,
i = 0,
chunks = 0;
ERL_NIF_TERM *list, result;
canmsg_t buffer[sizeof(canmsg_t) * BUFFER_LIMIT];
do {
int status = _wait_for_input(handle, timeout);
if (status == 0) break;
if (status == -1)
{
result = enif_make_int(env, errno);
goto end;
}
length = read(handle->device, &buffer[chunks], sizeof(canmsg_t) * chunk_size);
if (length < 0) break;
chunks += length / sizeof(canmsg_t) ;
} while (length > 0 && chunks <= BUFFER_LIMIT && chunks < chunk_size);
if (chunks > 0)
{
if (handle->raw)
{
void* data = enif_make_new_binary(env, chunks * sizeof(canmsg_t), &result);
memcpy(data, buffer, chunks * sizeof(canmsg_t));
}
else
{
list = enif_alloc(sizeof(ERL_NIF_TERM) * chunks);
// rewrite canmsgs to list of tuples
for (i = 0; i < chunks; i++)
{
canmsg_t* can_msg = buffer + i;
ERL_NIF_TERM bin;
void* data = enif_make_new_binary(env, can_msg->length, &bin);
memcpy(data, can_msg->data, can_msg->length);
list[i] = enif_make_tuple3(env,
enif_make_int(env, can_msg->id),
enif_make_tuple2(env,
enif_make_long(env, can_msg->timestamp.tv_sec),
enif_make_long(env, can_msg->timestamp.tv_usec)),
bin);
}
result = enif_make_list_from_array(env, list, chunks);
enif_free(list);
}
}
else if (length == 0)
result = enif_make_int(env, 0);
else
result = enif_make_int(env, errno);
end:
return result;
}
示例10: setup_2
static ERL_NIF_TERM setup_2(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) {
unsigned int channel;
unsigned long speed;
int error;
if (argc != 2 || !enif_is_number(env, argv[0]) || !enif_is_number(env, argv[1])) {
return enif_make_badarg(env);
}
if (!enif_get_uint(env, argv[0], &channel)) {
return enif_make_badarg(env);
}
if (!enif_get_ulong(env, argv[1], &speed)) {
return enif_make_badarg(env);
}
if (speed < 500000 || speed > 32000000) {
return enif_make_badarg(env);
}
switch (channel) {
case 0:
if (state0.fd != 0) {
return enif_make_tuple2(env, enif_make_atom(env, "error"), enif_make_string(env, "channel already opened", ERL_NIF_LATIN1));
}
else {
state0.env = env;
state0.fd = wiringPiSPISetup(channel, speed);
if (state0.fd == 0) {
error = errno;
return enif_make_tuple2(env, enif_make_atom(env, "error"), enif_make_int(env, error));
}
else {
return enif_make_tuple2(env, enif_make_atom(env, "ok"), enif_make_int(env, channel));
}
}
break;
case 1:
if (state1.fd != 0) {
return enif_make_tuple2(env, enif_make_atom(env, "error"), enif_make_string(env, "channel already opened", ERL_NIF_LATIN1));
}
else {
state1.env = env;
state1.fd = wiringPiSPISetup(channel, speed);
if (state1.fd == 0) {
error = errno;
return enif_make_tuple2(env, enif_make_atom(env, "error"), enif_make_int(env, error));
}
else {
return enif_make_tuple2(env, enif_make_atom(env, "ok"), enif_make_int(env, channel));
}
}
break;
default:
return enif_make_badarg(env);
}
}
示例11: parse_error
/**
* Convert an UErrorCode to an atom.
*/
ERL_NIF_TERM parse_error(ErlNifEnv* env, UErrorCode status,
UParseError* e) {
return build_error(env,
enif_make_tuple3(env,
enif_make_atom(env, u_errorName(status)),
enif_make_tuple2(env,
enif_make_atom(env, "line"),
enif_make_int(env, (int) e->line)),
enif_make_tuple2(env,
enif_make_atom(env, "offset"),
enif_make_int(env, (int) e->offset))
));
}
示例12: version_directive_to_term
static ERL_NIF_TERM version_directive_to_term(ErlNifEnv *env, yaml_version_directive_t *ver)
{
if(ver)
{
return enif_make_tuple2(env,
enif_make_int(env, ver->major),
enif_make_int(env, ver->minor));
}
else
{
return enif_make_atom(env, "null");
}
}
示例13: window_event_to_map
static ERL_NIF_TERM window_event_to_map(ErlNifEnv* env, SDL_Event* event, ERL_NIF_TERM map)
{
enif_make_map_put(env, map, atom_window_id,
enif_make_uint(env, event->window.windowID), &map);
enif_make_map_put(env, map, atom_event,
window_event_to_atom(event->window.event), &map);
enif_make_map_put(env, map, atom_data1,
enif_make_int(env, event->window.data1), &map);
enif_make_map_put(env, map, atom_data2,
enif_make_int(env, event->window.data2), &map);
return map;
}
示例14: return_value
ERL_NIF_TERM return_value(ErlNifEnv* env, void * cookie) {
struct libcouchbase_callback *cb;
cb = (struct libcouchbase_callback *)cookie;
ErlNifBinary value_binary;
ERL_NIF_TERM term;
enif_alloc_binary(cb->size, &value_binary);
memcpy(value_binary.data, cb->data, cb->size);
term = enif_make_tuple3(env, enif_make_int(env, cb->cas),
enif_make_int(env, cb->flag),
enif_make_binary(env, &value_binary));
free(cb->data);
return term;
}
示例15: pteracuda_nifs_buffer_minmax
ERL_NIF_TERM pteracuda_nifs_buffer_minmax(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) {
PCudaContextRef *ctxRef;
PCudaBufferRef *bufRef;
if (argc !=2 || !enif_get_resource(env, argv[0], pteracuda_context_resource, (void **) &ctxRef) ||
!enif_get_resource(env, argv[1], pteracuda_buffer_resource, (void **) &bufRef)) {
return enif_make_badarg(env);
}
if (bufRef->buffer->size() == 0) {
return enif_make_tuple2(env, ATOM_OK, enif_make_tuple2(env, enif_make_int(env, 0),
enif_make_int(env, 0)));
}
cuCtxSetCurrent(ctxRef->ctx);
return enif_make_tuple2(env, ATOM_OK, bufRef->buffer->minmax(env));
}