#ifndef __NODE_TYPEDARRAY_H__
#define __NODE_TYPEDARRAY_H__

// node
#include <node.h>
#include <node_object_wrap.h>

// nan
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
#include <nan.h>
#pragma GCC diagnostic pop

// gdal
#include <gdal_priv.h>

using namespace v8;
using namespace node;

namespace node_gdal {

// V8 Typed Arrays
//
// Int8Array    1  8-bit twos complement  signed integer  signed char
// Uint8Array   1  8-bit unsigned integer  unsigned  char
// Int16Array   2  16-bit twos complement  signed integer  short
// Uint16Array  2  16-bit unsigned integer  unsigned short
// Int32Array   4  32-bit twos complement  signed integer  int
// Uint32Array  4  32-bit unsigned integer  unsigned int
// Float32Array 4  32-bit IEEE floating point number  float
// Float64Array 8  64-bit IEEE floating point number  double

// GDALDataType {
//   GDT_Unknown = 0,
//   GDT_Byte = 1,
//   GDT_UInt16 = 2,
//   GDT_Int16 = 3,
//   GDT_UInt32 = 4,
//   GDT_Int32 = 5,
//   GDT_Float32 = 6,
//   GDT_Float64 = 7,
//   GDT_CInt16 = 8,
//   GDT_CInt32 = 9,
//   GDT_CFloat32 = 10,
//   GDT_CFloat64 = 11,
//   GDT_TypeCount = 12
// }

namespace TypedArray {

	Handle<Value> New(GDALDataType type, unsigned int length);
	int Length(Handle<Object> array);
	void* Data(Handle<Object> array);
	GDALDataType Identify(Handle<Object> array);
	void* Validate(Handle<Object> obj, GDALDataType type, int min_length);
}

}
#endif
