mirror of https://github.com/lukechilds/node.git
3 changed files with 81 additions and 0 deletions
@ -0,0 +1,55 @@ |
|||||
|
#include <node.h> |
||||
|
#include <v8.h> |
||||
|
#include <uv.h> |
||||
|
|
||||
|
using namespace v8; |
||||
|
|
||||
|
extern "C" { |
||||
|
void init(Handle<Object> target); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
#define BUFSIZE 1024 |
||||
|
static uint8_t buf[BUFSIZE]; |
||||
|
static uv_mutex_t lock; |
||||
|
|
||||
|
|
||||
|
Handle<Value> Get(const Arguments& args) { |
||||
|
HandleScope scope; |
||||
|
|
||||
|
int index = args[0]->Uint32Value(); |
||||
|
|
||||
|
if (index < 0 || BUFSIZE <= index) { |
||||
|
return ThrowException(Exception::Error(String::New("out of bounds"))); |
||||
|
} |
||||
|
|
||||
|
return scope.Close(Integer::New(buf[index])); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
Handle<Value> Set(const Arguments& args) { |
||||
|
uv_mutex_lock(&lock); |
||||
|
HandleScope scope; |
||||
|
|
||||
|
int index = args[0]->Uint32Value(); |
||||
|
|
||||
|
if (index < 0 || BUFSIZE <= index) { |
||||
|
return ThrowException(Exception::Error(String::New("out of bounds"))); |
||||
|
} |
||||
|
|
||||
|
buf[index] = args[1]->Uint32Value(); |
||||
|
|
||||
|
Local<Integer> val = Integer::New(buf[index]); |
||||
|
|
||||
|
uv_mutex_unlock(&lock); |
||||
|
|
||||
|
return scope.Close(val); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
void init(Handle<Object> target) { |
||||
|
NODE_SET_METHOD(target, "get", Get); |
||||
|
NODE_SET_METHOD(target, "set", Set); |
||||
|
target->Set(String::New("length"), Integer::New(BUFSIZE)); |
||||
|
uv_mutex_init(&lock); |
||||
|
} |
@ -0,0 +1,8 @@ |
|||||
|
{ |
||||
|
'targets': [ |
||||
|
{ |
||||
|
'target_name': 'binding', |
||||
|
'sources': [ 'binding.cc' ] |
||||
|
} |
||||
|
] |
||||
|
} |
@ -0,0 +1,18 @@ |
|||||
|
var assert = require('assert'); |
||||
|
var binding = require('./out/Release/binding'); |
||||
|
|
||||
|
console.log("binding.length =", binding.length); |
||||
|
|
||||
|
if (process.tid === 1) { |
||||
|
var isolate = process._newIsolate(process.argv); |
||||
|
for (var i = 0; i < binding.length; i++) { |
||||
|
console.log('parent', |
||||
|
'binding.set(' + i + ', ' + i + ')', |
||||
|
binding.set(i, i)); |
||||
|
} |
||||
|
} else { |
||||
|
for (var i = 0; i < binding.length; i++) { |
||||
|
console.log('child', 'binding.get(' + i + ')', binding.get(i)); |
||||
|
} |
||||
|
} |
||||
|
|
Loading…
Reference in new issue