• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++ checkudata函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了C++中checkudata函数的典型用法代码示例。如果您正苦于以下问题:C++ checkudata函数的具体用法?C++ checkudata怎么用?C++ checkudata使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。



在下文中一共展示了checkudata函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: luanet_tonetobject

LUA_API int luanet_tonetobject(lua_State *L,int index) 
{
	int *udata;
	if (lua_type(L,index)==LUA_TUSERDATA) 
	{
		if (luaL_checkmetatable(L,index)) 
		{
			udata = (int*)lua_touserdata (L,index);
			if (udata != NULL) 
				return *udata;
		}

		udata = (int*)checkudata (L, index, "luaNet_class");
		if (udata!=NULL) 
			return *udata;

		udata = (int*)checkudata (L, index, "luaNet_searchbase");
		if (udata!=NULL) 
			return *udata;

		udata = (int*)checkudata(L, index, "luaNet_function");
		if (udata!=NULL) 
			return *udata;
	}
	return -1;
}
开发者ID:jarjin,项目名称:SimpleFramework_WP,代码行数:26,代码来源:lnet.cpp


示例2: sock_accept

/*
 * Arguments: sd_udata, new_sd_udata, [sock_addr_udata]
 * Returns: [new_sd_udata | false (EAGAIN)]
 */
static int
sock_accept (lua_State *L)
{
    sd_t sd = (sd_t) lua_unboxinteger(L, 1, SD_TYPENAME);
    sd_t *sdp = checkudata(L, 2, SD_TYPENAME);
    struct sock_addr *from = lua_isnoneornil(L, 3) ? NULL
     : checkudata(L, 3, SA_TYPENAME);
    struct sockaddr *sap = NULL;
    socklen_t *slp = NULL;

    if (from) {
	sap = &from->u.addr;
	slp = &from->addrlen;
    }
#ifndef _WIN32
    do sd = accept(sd, sap, slp);
    while (sd == -1 && SYS_ERRNO == EINTR);
#else
    sd = accept(sd, sap, slp);
#endif
    if (sd != (sd_t) -1) {
	*sdp = sd;
	lua_settop(L, 2);
	return 1;
    }
    else if (SYS_EAGAIN(SYS_ERRNO)) {
	lua_pushboolean(L, 0);
	return 1;
    }
    return sys_seterror(L, 0);
}
开发者ID:LuaDist,项目名称:luasys,代码行数:35,代码来源:sys_sock.c


示例3: mem_memcpy

/*
 * Arguments: membuf_udata, source (membuf_udata), num_bytes (number)
 * Returns: [membuf_udata]
 */
static int
mem_memcpy (lua_State *L)
{
    struct membuf *mb = checkudata(L, 1, MEM_TYPENAME);
    struct membuf *src = checkudata(L, 2, MEM_TYPENAME);
    const int len = luaL_checkinteger(L, 3);

    lua_settop(L, 1);
    return memcpy(mb->data, src->data, len) ? 1 : 0;
}
开发者ID:dilshod,项目名称:luasys,代码行数:14,代码来源:sys_mem.c


示例4: sys_random

/*
 * Returns: [rand_udata]
 */
static int
sys_random (lua_State *L)
{
#ifndef _WIN32
  fd_t *fdp = lua_newuserdata(L, sizeof(fd_t));

#if defined(__OpenBSD__)
  *fdp = open("/dev/arandom", O_RDONLY, 0);
  if (*fdp == (fd_t) -1)
    *fdp = open("/dev/urandom", O_RDONLY, 0);
#else
  *fdp = open("/dev/urandom", O_RDONLY, 0);
#endif
  if (*fdp != (fd_t) -1) {
#else
  HCRYPTPROV *p = lua_newuserdata(L, sizeof(void *));

  if (CryptAcquireContext(p, NULL, NULL,
   PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) {
#endif
    luaL_getmetatable(L, RAND_TYPENAME);
    lua_setmetatable(L, -2);
    return 1;
  }
  return sys_seterror(L, 0);
}

/*
 * Arguments: rand_udata
 */
static int
rand_close (lua_State *L)
{
#ifndef _WIN32
  fd_t *fdp = (fd_t *) checkudata(L, 1, RAND_TYPENAME);

  if (*fdp != (fd_t) -1) {
    close(*fdp);
    *fdp = (fd_t) -1;
  }
#else
  HCRYPTPROV *p = (HCRYPTPROV *) checkudata(L, 1, RAND_TYPENAME);

  if (*p != (HCRYPTPROV) -1) {
    CryptReleaseContext(*p, 0);
    *p = (HCRYPTPROV) -1;
  }
#endif
  return 0;
}
开发者ID:ELMERzark,项目名称:luasys,代码行数:53,代码来源:sys_rand.c


示例5: lnet_tag_type

static int lnet_tag_type(lua_State* L)
{
    libnet_t* ud = checkudata(L);
    libnet_pblock_t* pblock = checkpblock(L, ud, 2);
    lua_pushstring(L, libnet_diag_dump_pblock_type(pblock->type));
    return 1;
}
开发者ID:Wurldtech,项目名称:libnet,代码行数:7,代码来源:net.c


示例6: levq_del

/*
 * Arguments: evq_udata, ev_ludata, [reuse_fd (boolean)]
 * Returns: [evq_udata]
 */
static int
levq_del (lua_State *L)
{
    struct event_queue *evq = checkudata(L, 1, EVQ_TYPENAME);
    struct event *ev = levq_toevent(L, 2);
    const int reuse_fd = lua_toboolean(L, 3);
    int res = 0;

    lua_assert(ev);

#undef ARG_LAST
#define ARG_LAST	1

#ifdef EVQ_POST_INIT
    if (ev == evq->ev_post)
	evq->ev_post = NULL;
#endif

    if (!event_deleted(ev))
	res = evq_del(ev, reuse_fd);

    if (!(ev->flags & (EVENT_ACTIVE | EVENT_DELETE)))
	levq_del_event(evq, ev);

    ev->flags |= EVENT_DELETE;

    if (!res) {
	lua_settop(L, 1);
	return 1;
    }
    return sys_seterror(L, 0);
}
开发者ID:dilshod,项目名称:luasys,代码行数:36,代码来源:sys_evq.c


示例7: lnet_dump

/*-
-- net:dump()

Write summary of protocol blocks to stdout.
*/
static int lnet_dump(lua_State* L)
{
    libnet_t* ud = checkudata(L);
    libnet_pblock_t* p = ud->protocol_blocks;
    int strings = 0;

    while(p) {
        /* h_len is header length for checksumming? "chksum length"? */
        char str[1024];
        sprintf(str, "tag %d flags %d type %s/%#x buf %p b_len %2u h_len %2u copied %u prev %d next %d\n",
                p->ptag, p->flags, type_string(p->type), p->type,
                p->buf, p->b_len, p->h_len, p->copied,
                p->prev ? p->prev->ptag : -1,
                p->next ? p->next->ptag : -1
                );
        lua_pushstring(L, str);
        p = p->next;
        strings++;
    }
    lua_pushfstring(L, "link_offset %d aligner %d total_size %d nblocks %d\n",
            ud->link_offset, ud->aligner, ud->total_size, ud->n_pblocks);
    strings++;

    lua_concat(L, strings);

    return 1;
}
开发者ID:Wurldtech,项目名称:libnet,代码行数:32,代码来源:net.c


示例8: lnet_get_eth

/*-
-- argt = net:get_eth()

Get eth pblock argument table.
*/
static int lnet_get_eth (lua_State *L)
{
    libnet_t* ud = checkudata(L);
    libnet_pblock_t* pblock = checkptype(L, ud, LIBNET_PBLOCK_ETH_H);
    struct libnet_ethernet_hdr* hdr = (struct libnet_ethernet_hdr*) pblock->buf;

    lua_newtable(L);
    setintfield(L, 2, "ptag", pblock->ptag);
    setethfield(L, 2, "src", hdr->ether_shost);
    setethfield(L, 2, "dst", hdr->ether_dhost);
    setnsintfield(L, 2, "type", hdr->ether_type);

    if(!pblock->prev) {
        /* direct payload */
        uint8_t* data = pblock->buf + LIBNET_ETH_H;
        uint32_t datasz = 0;

        if(pblock->b_len > LIBNET_ETH_H) {
            datasz = pblock->b_len - LIBNET_ETH_H;
        }

        setlstringfield(L, 2, "payload", data, (size_t)datasz);
    }

    return 1;
}
开发者ID:Wurldtech,项目名称:libnet,代码行数:31,代码来源:net.c


示例9: levq_callback

/*
 * Arguments: evq_udata, ev_ludata, [callback (function)]
 * Returns: evq_udata | callback (function)
 */
static int
levq_callback (lua_State *L)
{
    struct event_queue *evq = checkudata(L, 1, EVQ_TYPENAME);
    struct event *ev = levq_toevent(L, 2);
    lua_State *NL = evq->L;
    const int top = lua_gettop(L);

    lua_assert(ev && !event_deleted(ev));

    if (top < 3) {
	lua_rawgeti(NL, EVQ_CORO_CALLBACK, ev->ev_id);
	lua_xmove(NL, L, 1);
    } else {
	ev->flags &= ~(EVENT_CALLBACK | EVENT_CALLBACK_CORO);
	if (!lua_isnoneornil(L, 3)) {
	    ev->flags |= EVENT_CALLBACK
	     | (lua_isthread(L, 3) ? EVENT_CALLBACK_CORO : 0);
	}

	lua_settop(L, 3);
	lua_xmove(L, NL, 1);
	lua_rawseti(NL, EVQ_CORO_CALLBACK, ev->ev_id);
	lua_settop(L, 1);
    }
    return 1;
}
开发者ID:dilshod,项目名称:luasys,代码行数:31,代码来源:sys_evq.c


示例10: mem_free

/*
 * Arguments: membuf_udata
 * Returns: membuf_udata
 */
static int
mem_free (lua_State *L)
{
    struct membuf *mb = checkudata(L, 1, MEM_TYPENAME);

    if (mb->data) {
	const unsigned int mb_flags = mb->flags;

	switch (mb_flags & (MEM_ALLOC | MEM_MAP)) {
	case MEM_ALLOC:
	    free(mb->data);
	    break;
#ifdef USE_MMAP
	case MEM_MAP:
#ifndef _WIN32
	    munmap(mb->data, mb->len);
#else
	    UnmapViewOfFile(mb->data);
#endif
	    break;
#endif /* USE_MMAP */
	}
	mb->data = NULL;
	mb->flags &= MEM_TYPE_MASK;
    }
    return 1;
}
开发者ID:dilshod,项目名称:luasys,代码行数:31,代码来源:sys_mem.c


示例11: channel_tostring

static int
channel_tostring (lua_State *L)
{
    struct channel *chan = checkudata(L, 1, CHANNEL_TYPENAME);
    lua_pushfstring(L, "[chan: %p]", chan);
    return 1;
}
开发者ID:richardhundt,项目名称:gaia,代码行数:7,代码来源:thread_channel.c


示例12: pipe_close

/*
 * Arguments: pipe_udata
 */
static int
pipe_close (lua_State *L)
{
    struct pipe_ref *pr = checkudata(L, 1, PIPE_TYPENAME);
    struct pipe *pp = pr->pipe;

    if (pp) {
	thread_critsect_t *csp = pipe_critsect_ptr(pp);
	int nref;

	thread_critsect_enter(csp);
	nref = pp->nref--;
	thread_critsect_leave(csp);

	if (!nref) {
	    thread_critsect_del(&pp->cs);
	    thread_cond_del(&pp->put_cond);
	    thread_cond_del(&pp->get_cond);

	    /* deallocate buffers */
	    if (pp->rbuf) {
		struct pipe_buf *rpb = pp->rbuf, *wpb = pp->wbuf;
		do {
		    struct pipe_buf *pb = rpb->next_buf;
		    free(rpb);
		    rpb = pb;
		} while (rpb != wpb);
	    }
	    free(pp);
	}
	pr->pipe = NULL;
    }
    return 0;
}
开发者ID:dilshod,项目名称:luasys,代码行数:37,代码来源:thread_pipe.c


示例13: luanet_checkudata

LUA_API int luanet_checkudata (lua_State *L,int index,const char *meta) 
{
	int *udata = (int*)checkudata (L, index, meta);
	if(udata!=NULL) 
		return *udata;
	return -1;
}
开发者ID:jarjin,项目名称:SimpleFramework_WP,代码行数:7,代码来源:lnet.cpp


示例14: membuf_read

/*
 * Arguments: membuf_udata, [count (number) | mode (string: "*l", "*a")]
 * Returns: [string | number]
 */
static int
membuf_read (lua_State *L)
{
  struct membuf *mb = checkudata(L, 1, MEM_TYPENAME);

  lua_settop(L, 2);
  if (mb->flags & MEM_ISTREAM) {
    lua_getfenv(L, 1);
    lua_rawgeti(L, -1, MEM_INPUT);  /* stream object */
    lua_getfield(L, -1, "read");
    lua_insert(L, -2);
  }

  if (lua_type(L, 2) == LUA_TNUMBER)
    read_bytes(L, mb, lua_tointeger(L, 2));
  else {
    const char *s = luaL_optstring(L, 2, "*a");

    switch (s[1]) {
    case 'l':
      return read_line(L, mb);
    case 'a':
      read_bytes(L, mb, ~((size_t) 0));
      break;
    default:
      luaL_argerror(L, 2, "invalid option");
    }
  }
  return 1;
}
开发者ID:ELMERzark,项目名称:luasys,代码行数:34,代码来源:membuf.c


示例15: dpool_tostring

/*
 * Arguments: dpool_udata
 * Returns: string
 */
static int
dpool_tostring (lua_State *L)
{
    struct data_pool *dp = checkudata(L, 1, DPOOL_TYPENAME);
    lua_pushfstring(L, DPOOL_TYPENAME " (%p)", &dp->tev);
    return 1;
}
开发者ID:LuaDist,项目名称:luasys,代码行数:11,代码来源:thread_dpool.c


示例16: lnet_pblock

/*-
-- net:pblock(lua_State* L, int ptag)

Get a table with all the pblock info in it.
*/
static int lnet_pblock(lua_State* L)
{
    libnet_t* ud = checkudata(L);
    libnet_pblock_t* pblock = checkpblock(L, ud, 2);
    pushpblock(L, pblock);
    return 1;
}
开发者ID:Wurldtech,项目名称:libnet,代码行数:12,代码来源:net.c


示例17: membuf_assosiate

/*
 * Arguments: membuf_udata, stream
 */
static int
membuf_assosiate (lua_State *L, int type)
{
  struct membuf *mb = checkudata(L, 1, MEM_TYPENAME);
  const int idx = (type == MEM_ISTREAM) ? MEM_INPUT : MEM_OUTPUT;

  lua_settop(L, 2);
  if (lua_isnoneornil(L, 2))
    mb->flags &= ~type;
  else {
    mb->flags |= type;

    lua_getfield(L, -1, SYS_BUFIO_TAG);
    if (!lua_isnil(L, -1)) {
      mb->flags |= (type == MEM_ISTREAM)
       ? MEM_ISTREAM_BUFIO : MEM_OSTREAM_BUFIO;
    }
    lua_pop(L, 1);
  }

  lua_getfenv(L, 1);
  if (!lua_istable(L, -1)) {
    lua_pop(L, 1);
    lua_newtable(L);
    lua_pushvalue(L, -1);
    lua_setfenv(L, 1);
  }
  lua_pushvalue(L, 2);
  lua_rawseti(L, -2, idx);
  return 0;
}
开发者ID:ELMERzark,项目名称:luasys,代码行数:34,代码来源:membuf.c


示例18: lnet_block

/*
FIXME - we should just have a packet function, this fails on single blocks/ptags,
and the :pblock() method is better, anyway.
*/
static int lnet_block(lua_State* L)
{
    libnet_t* ud = checkudata(L);

    u_int32_t len;
    u_int8_t *packet = NULL;
    u_int8_t *block;
    int r;

    r = libnet_pblock_coalesce(ud, &packet, &len);

    check_error(L, ud, r);

    block = packet;

    if(!lua_isnoneornil(L, 2)) {
        libnet_pblock_t* end = checkpblock(L, ud, 2);
        libnet_pblock_t* p = ud->pblock_end;
        while(p != end) {
            block += p->b_len;
            p = p->prev;
        }
        assert(p == end);
        len = p->b_len;
    }

    lua_pushlstring(L, (char*) block, len);

    libnet_adv_free_packet(ud, packet);

    return 1;
}
开发者ID:Wurldtech,项目名称:libnet,代码行数:36,代码来源:net.c


示例19: thread_done

/*
 * Arguments: thread_udata
 */
static int
thread_done (lua_State *L)
{
  struct sys_thread *td = checkudata(L, 1, THREAD_TYPENAME);

  if (td->L) {
    if (thread_isvm(td)) {
      thread_critsect_leave(td->vmcsp);
      thread_critsect_del(td->vmcsp);
    } else {
      sys_vm2_leave(td);
#ifndef _WIN32
      {
        THREAD_FUNC_RES v;
        pthread_join(td->tid, &v);
      }
#else
      WaitForSingleObject(td->tid, INFINITE);
      CloseHandle(td->tid);
#endif
      sys_vm2_enter(td);
    }
    (void) thread_cond_del(&td->cond);

    lua_rawgetp(L, LUA_REGISTRYINDEX, THREAD_KEY_ADDRESS);
    lua_pushnil(L);
    lua_rawsetp(L, -2, td->L); /* coroutine */
    lua_pop(L, 1);

    td->L = NULL;
  }
  return 0;
}
开发者ID:tnodir,项目名称:luasys,代码行数:36,代码来源:sys_thread.c


示例20: mem_typesize

/*
 * Arguments: membuf_udata
 * Returns: size (number)
 */
static int
mem_typesize (lua_State *L)
{
    struct membuf *mb = checkudata(L, 1, MEM_TYPENAME);

    lua_pushinteger(L, memtypesize(mb));
    return 1;
}
开发者ID:dilshod,项目名称:luasys,代码行数:12,代码来源:sys_mem.c



注:本文中的checkudata函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++ checkuserdata函数代码示例发布时间:2022-05-30
下一篇:
C++ checktype函数代码示例发布时间:2022-05-30
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap