Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion binding.gyp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
"targets": [
{
"libraries": [
"-lnetcdf"
"-lnetcdf",
"-lhdf5"
],
"sources": [
"src/Group.cpp",
Expand Down
92 changes: 42 additions & 50 deletions src/Attribute.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -76,104 +76,96 @@ void Attribute::GetValue(v8::Local<v8::String> property, const v8::PropertyCallb

switch (obj->type) {
case NC_BYTE: {
int8_t* v = new int8_t[len];
retval = nc_get_att(obj->parent_id, obj->var_id, obj->name.c_str(), v);
std::unique_ptr<v8::BackingStore> v = v8::ArrayBuffer::NewBackingStore(isolate, len * sizeof(int8_t));
retval = nc_get_att(obj->parent_id, obj->var_id, obj->name.c_str(), v->Data());
if (len == 1) {
info.GetReturnValue().Set(v8::Integer::New(isolate, v[0]));
info.GetReturnValue().Set(v8::Integer::New(isolate, static_cast<int8_t *>(v->Data())[0]));
} else {
info.GetReturnValue().Set(v8::Int8Array::New(v8::ArrayBuffer::New(isolate, v, len * 1), 0, len));
info.GetReturnValue().Set(v8::Int8Array::New(v8::ArrayBuffer::New(isolate, std::move(v)), 0, len));
}
delete[] v;
} break;
case NC_SHORT: {
int16_t* v = new int16_t[len];
retval = nc_get_att(obj->parent_id, obj->var_id, obj->name.c_str(), v);
std::unique_ptr<v8::BackingStore> v = v8::ArrayBuffer::NewBackingStore(isolate, len * sizeof(int16_t));
retval = nc_get_att(obj->parent_id, obj->var_id, obj->name.c_str(), v->Data());
if (len == 1) {
info.GetReturnValue().Set(v8::Integer::New(isolate, v[0]));
info.GetReturnValue().Set(v8::Integer::New(isolate, static_cast<int16_t *>(v->Data())[0]));
} else {
info.GetReturnValue().Set(v8::Int16Array::New(v8::ArrayBuffer::New(isolate, v, len * 2), 0, len));
info.GetReturnValue().Set(v8::Int16Array::New(v8::ArrayBuffer::New(isolate, std::move(v)), 0, len));
}
delete[] v;
} break;
case NC_INT: {
int32_t* v = new int32_t[len];
retval = nc_get_att(obj->parent_id, obj->var_id, obj->name.c_str(), v);
std::unique_ptr<v8::BackingStore> v = v8::ArrayBuffer::NewBackingStore(isolate, len * sizeof(int32_t));
retval = nc_get_att(obj->parent_id, obj->var_id, obj->name.c_str(), v->Data());
if (len == 1) {
info.GetReturnValue().Set(v8::Integer::New(isolate, v[0]));
info.GetReturnValue().Set(v8::Integer::New(isolate, static_cast<int32_t *>(v->Data())[0]));
} else {
info.GetReturnValue().Set(v8::Int32Array::New(v8::ArrayBuffer::New(isolate, v, len * 4), 0, len));
info.GetReturnValue().Set(v8::Int32Array::New(v8::ArrayBuffer::New(isolate, std::move(v)), 0, len));
}
delete[] v;
} break;
case NC_FLOAT: {
float* v = new float[len];
retval = nc_get_att(obj->parent_id, obj->var_id, obj->name.c_str(), v);
std::unique_ptr<v8::BackingStore> v = v8::ArrayBuffer::NewBackingStore(isolate, len * sizeof(float));
retval = nc_get_att(obj->parent_id, obj->var_id, obj->name.c_str(), v->Data());
if (len == 1) {
info.GetReturnValue().Set(v8::Number::New(isolate, v[0]));
info.GetReturnValue().Set(v8::Number::New(isolate, static_cast<float *>(v->Data())[0]));
} else {
info.GetReturnValue().Set(v8::Float32Array::New(v8::ArrayBuffer::New(isolate, v, len * 4), 0, len));
info.GetReturnValue().Set(v8::Float32Array::New(v8::ArrayBuffer::New(isolate, std::move(v)), 0, len));
}
delete[] v;
} break;
case NC_DOUBLE: {
double* v = new double[len];
retval = nc_get_att(obj->parent_id, obj->var_id, obj->name.c_str(), v);
std::unique_ptr<v8::BackingStore> v = v8::ArrayBuffer::NewBackingStore(isolate, len * sizeof(double));
retval = nc_get_att(obj->parent_id, obj->var_id, obj->name.c_str(), v->Data());
if (len == 1) {
info.GetReturnValue().Set(v8::Number::New(isolate, v[0]));
info.GetReturnValue().Set(v8::Number::New(isolate, static_cast<double *>(v->Data())[0]));
} else {
info.GetReturnValue().Set(v8::Float64Array::New(v8::ArrayBuffer::New(isolate, v, len * 8), 0, len));
info.GetReturnValue().Set(v8::Float64Array::New(v8::ArrayBuffer::New(isolate, std::move(v)), 0, len));
}
delete[] v;
} break;
case NC_UBYTE: {
uint8_t* v = new uint8_t[len];
retval = nc_get_att(obj->parent_id, obj->var_id, obj->name.c_str(), v);
std::unique_ptr<v8::BackingStore> v = v8::ArrayBuffer::NewBackingStore(isolate, len * sizeof(uint8_t));
retval = nc_get_att(obj->parent_id, obj->var_id, obj->name.c_str(), v->Data());
if (len == 1) {
info.GetReturnValue().Set(v8::Integer::New(isolate, v[0]));
info.GetReturnValue().Set(v8::Integer::New(isolate, static_cast<uint8_t *>(v->Data())[0]));
} else {
info.GetReturnValue().Set(v8::Uint8Array::New(v8::ArrayBuffer::New(isolate, v, len * 1), 0, len));
info.GetReturnValue().Set(v8::Uint8Array::New(v8::ArrayBuffer::New(isolate, std::move(v)), 0, len));
}
delete[] v;
} break;
case NC_USHORT: {
uint16_t* v = new uint16_t[len];
retval = nc_get_att(obj->parent_id, obj->var_id, obj->name.c_str(), v);
std::unique_ptr<v8::BackingStore> v = v8::ArrayBuffer::NewBackingStore(isolate, len * sizeof(uint16_t));
retval = nc_get_att(obj->parent_id, obj->var_id, obj->name.c_str(), v->Data());
if (len == 1) {
info.GetReturnValue().Set(v8::Integer::New(isolate, v[0]));
info.GetReturnValue().Set(v8::Integer::New(isolate, static_cast<uint16_t *>(v->Data())[0]));
} else {
info.GetReturnValue().Set(v8::Uint16Array::New(v8::ArrayBuffer::New(isolate, v, len * 2), 0, len));
info.GetReturnValue().Set(v8::Uint16Array::New(v8::ArrayBuffer::New(isolate, std::move(v)), 0, len));
}
delete[] v;
} break;
case NC_UINT: {
uint32_t* v = new uint32_t[len];
retval = nc_get_att(obj->parent_id, obj->var_id, obj->name.c_str(), v);
std::unique_ptr<v8::BackingStore> v = v8::ArrayBuffer::NewBackingStore(isolate, len * sizeof(uint32_t));
retval = nc_get_att(obj->parent_id, obj->var_id, obj->name.c_str(), v->Data());
if (len == 1) {
info.GetReturnValue().Set(v8::Integer::NewFromUnsigned(isolate, v[0]));
info.GetReturnValue().Set(v8::Integer::NewFromUnsigned(isolate, static_cast<uint32_t *>(v->Data())[0]));
} else {
info.GetReturnValue().Set(v8::Uint32Array::New(v8::ArrayBuffer::New(isolate, v, len * 4), 0, len));
info.GetReturnValue().Set(v8::Uint32Array::New(v8::ArrayBuffer::New(isolate, std::move(v)), 0, len));
}
delete[] v;
} break;
case NC_INT64: {
int64_t* v = new int64_t[len];
retval = nc_get_att(obj->parent_id, obj->var_id, obj->name.c_str(), v);
std::unique_ptr<v8::BackingStore> v = v8::ArrayBuffer::NewBackingStore(isolate, len * sizeof(int64_t));
retval = nc_get_att(obj->parent_id, obj->var_id, obj->name.c_str(), v->Data());
if (len == 1) {
info.GetReturnValue().Set(v8::Integer::New(isolate, static_cast<int32_t>(v[0])));
info.GetReturnValue().Set(v8::Integer::New(isolate, static_cast<int64_t *>(v->Data())[0]));
} else {
info.GetReturnValue().Set(v8::Int32Array::New(v8::ArrayBuffer::New(isolate, v, len * 8), 0, len));
// TODO: Should return BigInt64Array
info.GetReturnValue().Set(v8::Int32Array::New(v8::ArrayBuffer::New(isolate, std::move(v)), 0, len));
}
delete[] v;
} break;
case NC_UINT64: {
uint64_t* v = new uint64_t[len];
retval = nc_get_att(obj->parent_id, obj->var_id, obj->name.c_str(), v);
std::unique_ptr<v8::BackingStore> v = v8::ArrayBuffer::NewBackingStore(isolate, len * sizeof(uint64_t));
retval = nc_get_att(obj->parent_id, obj->var_id, obj->name.c_str(), v->Data());
if (len == 1) {
info.GetReturnValue().Set(v8::Integer::NewFromUnsigned(isolate, static_cast<uint32_t>(v[0])));
info.GetReturnValue().Set(v8::Integer::NewFromUnsigned(isolate, static_cast<uint64_t *>(v->Data())[0]));
} else {
info.GetReturnValue().Set(v8::Uint32Array::New(v8::ArrayBuffer::New(isolate, v, len * 8), 0, len));
// TODO: Should return BigInt64Array
info.GetReturnValue().Set(v8::Uint32Array::New(v8::ArrayBuffer::New(isolate, std::move(v)), 0, len));
}
delete[] v;
} break;
case NC_CHAR:
case NC_STRING: {
Expand Down
10 changes: 5 additions & 5 deletions src/Variable.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ void Variable::WriteSlice(const v8::FunctionCallbackInfo<v8::Value>& args) {
delete[] size;
return;
}
int retval = nc_put_vara(obj->parent_id, obj->id, pos, size, val->Buffer()->GetContents().Data());
int retval = nc_put_vara(obj->parent_id, obj->id, pos, size, val->Buffer()->GetBackingStore()->Data());
if (retval != NC_NOERR) {
throw_netcdf_error(isolate, retval);
}
Expand Down Expand Up @@ -293,7 +293,7 @@ void Variable::WriteStridedSlice(const v8::FunctionCallbackInfo<v8::Value>& args
delete[] stride;
return;
}
int retval = nc_put_vars(obj->parent_id, obj->id, pos, size, stride, val->Buffer()->GetContents().Data());
int retval = nc_put_vars(obj->parent_id, obj->id, pos, size, stride, val->Buffer()->GetBackingStore()->Data());
if (retval != NC_NOERR) {
throw_netcdf_error(isolate, retval);
}
Expand All @@ -320,7 +320,7 @@ void Variable::Read(const v8::FunctionCallbackInfo<v8::Value>& args) {
size[i] = 1;
}
v8::Local<v8::Value> result;
int retval;
int retval = NC_EVARMETA;
switch (obj->type) {
case NC_BYTE: {
int8_t v;
Expand Down Expand Up @@ -400,7 +400,7 @@ void Variable::ReadSlice(const v8::FunctionCallbackInfo<v8::Value>& args) {
total_size *= s;
}
v8::Local<v8::ArrayBuffer> buffer = v8::ArrayBuffer::New(isolate, total_size * type_sizes[obj->type]);
int retval = nc_get_vara(obj->parent_id, obj->id, pos, size, buffer->GetContents().Data());
int retval = nc_get_vara(obj->parent_id, obj->id, pos, size, buffer->GetBackingStore()->Data());
if (retval != NC_NOERR) {
throw_netcdf_error(isolate, retval);
delete[] pos;
Expand Down Expand Up @@ -470,7 +470,7 @@ void Variable::ReadStridedSlice(const v8::FunctionCallbackInfo<v8::Value>& args)
stride[i] = static_cast<ptrdiff_t>(args[3 * i + 2]->IntegerValue(isolate->GetCurrentContext()).ToChecked());
}
v8::Local<v8::ArrayBuffer> buffer = v8::ArrayBuffer::New(isolate, total_size * type_sizes[obj->type]);
int retval = nc_get_vars(obj->parent_id, obj->id, pos, size, stride, buffer->GetContents().Data());
int retval = nc_get_vars(obj->parent_id, obj->id, pos, size, stride, buffer->GetBackingStore()->Data());
if (retval != NC_NOERR) {
throw_netcdf_error(isolate, retval);
delete[] pos;
Expand Down