ref-struct, 在缓冲区之上,创建符合ABI的"struct" 实例

分享于 

4分钟阅读

GitHub

  繁體 雙語
Create ABI-compliant "struct" instances on top of Buffers
  • 源代码名称:ref-struct
  • 源代码网址:http://www.github.com/TooTallNate/ref-struct
  • ref-struct源代码文档
  • ref-struct源代码下载
  • Git URL:
    git://www.github.com/TooTallNate/ref-struct.git
    Git Clone代码到本地:
    git clone http://www.github.com/TooTallNate/ref-struct
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/TooTallNate/ref-struct
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    引用结构

    在缓冲区顶部创建符合abi的"结构"实例

    Build StatusBuild Status

    模块提供了使用"类型"接口在 node.js 缓冲区上方的"结构"实现。

    安装

    使用 npm 安装:

    $ npm install ref-struct

    示例

    假设你想从stdlib模拟 timeval 结构:

    structtimeval {
     time_t tv_sec; /* seconds since Jan. 1, 1970 */suseconds_t tv_usec; /* and microseconds */};
    var ref =require('ref')var StructType =require('ref-struct')// define the time typesvar time_t =ref.types.longvar suseconds_t =ref.types.long// define the"timeval" struct typevar timeval =StructType({
     tv_sec: time_t,
     tv_usec: suseconds_t
    })// now we can create instances of itvar tv =newtimeval
    node-ffi

    node-ffi 结合调用C 函数时,这里功能变得非常强大:

    var ffi =require('ffi')var tv =newtimevalgettimeofday(tv.ref(), null)
    插件渐进式 API

    你可以使用 defineProperty() 函数构建一个结构"类型"增量( 与解析器交互时有用)。 但是,在创建结构类型的实例之后,结构类型就结束了,并且不会再添加更多的属性到它。

    var ref =require('ref')var StructType =require('ref-struct')var MyStruct =StructType()MyStruct.defineProperty('width', ref.types.int)MyStruct.defineProperty('height', ref.types.int)var i =newMyStruct({ width:5, height:10 })MyStruct.defineProperty('weight', ref.types.int)// AssertionError: an instance of this Struct type has already been created, cannot add new"fields" anymore// at Function.defineProperty (/Users/nrajlich/ref-struct/lib/struct.js:180:3)

    许可证

    ( MIT许可证)

    版权所有( c ) 2012 Nathan Rajlich <nathan@tootallnate.net>

    若要在取得该软件副本时免费授予任何人,如有下列条件的软件,请免费授予该软件的副本,并与相关的文档文件('软件') 进行许可,包括不受限制的权利,包括以下条件:

    上述版权声明和本许可声明须包括在所有的副本或实质性部分的软件。

    软件是'是',没有任何保证,表示或者隐含,包括但不限于销售,适合特定用途和 NONINFRINGEMENT。 作者或者版权持有人在合同。侵权或者它的他与软件或者它的他用户交易的行为。


    相关文章