Add "ref-array" module

This commit is contained in:
Paul Loyd 2013-09-10 21:30:47 +04:00
parent 450abc694d
commit 1bcbd4e538
2 changed files with 72 additions and 0 deletions

View File

@ -3,6 +3,8 @@
import ffi = require('ffi');
import ref = require('ref');
import Struct = require('ref-struct');
import Union = require('ref-union');
import TArray = require('ref-array');
{
var sqlite3 = ref.types.void;
@ -77,3 +79,27 @@ import Struct = require('ref-struct');
var ST = Struct();
var test: ffi.Type = ST.fields['t'].type;
}
{
var CharArray = TArray('char');
var b = new Buffer('hello', 'ascii');
var a = new CharArray(b);
}
{
var Int32Array = TArray(ref.types.int32);
var input = [1, 4, 91, 123123, 5123512, 0, -1];
var a = new Int32Array(input);
}
{
var int = ref.types.int;
var IntArray = TArray(int);
var buf = new Buffer(int.size * 3);
int.set(buf, int.size * 0, 5);
int.set(buf, int.size * 1, 8);
int.set(buf, int.size * 2, 0);
var array = IntArray.untilZeros(buf);
}
{
var refCharArr = TArray('char')([1, 3, 5], 2).ref();
}

View File

@ -434,6 +434,52 @@ interface NodeBuffer {
inspect(): string;
}
declare module "ref-array" {
import ffi = require('ffi');
interface ArrayType extends ffi.Type {
BYTES_PER_ELEMENT: number;
/** The reference to the base type. */
type: ffi.Type;
/**
* Accepts a Buffer instance that should be an already-populated with data
* for the ArrayType. The "length" of the Array is determined by searching
* through the buffer's contents until an aligned NULL pointer is encountered.
*/
untilZeros(buffer: NodeBuffer): { [i: number]: number; length: number;
buffer: NodeBuffer; ref(): NodeBuffer; };
new (length?: number): { [i: number]: number; length: number;
buffer: NodeBuffer; ref(): NodeBuffer; };
new (data: number[], length?: number): { [i: number]: number; length: number;
buffer: NodeBuffer; ref(): NodeBuffer; };
new (data: NodeBuffer, length?: number): { [i: number]: number; length: number;
buffer: NodeBuffer; ref(): NodeBuffer; };
(length?: number): { [i: number]: number; length: number;
buffer: NodeBuffer; ref(): NodeBuffer; };
(data: number[], length?: number): { [i: number]: number; length: number;
buffer: NodeBuffer; ref(): NodeBuffer; };
(data: NodeBuffer, length?: number): { [i: number]: number; length: number;
buffer: NodeBuffer; ref(): NodeBuffer; };
}
/**
* The array type meta-constructor.
* The returned constructor's API is highly influenced by the WebGL
* TypedArray API.
*/
var ArrayType: {
new (type: ffi.Type, length?: number): ArrayType;
new (type: string, length?: number): ArrayType;
(type: ffi.Type, length?: number): ArrayType;
(type: string, length?: number): ArrayType;
};
export = ArrayType;
}
declare module "ref-struct" {
import ffi = require('ffi');