Skip to content
This repository was archived by the owner on Apr 22, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Prev Previous commit
buffer: proper API export for Windows
So that Windows users can properly include smalloc and node_buffer,
NODE_EXTERN was added to the headers that export this functionality.
  • Loading branch information
trevnorris committed Jun 18, 2013
commit 7373c4ddb7143fb7da75feda39c70788fb1bcfc7
29 changes: 15 additions & 14 deletions src/node_buffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.

#include "node.h"
#include "smalloc.h"
#include "v8.h"

Expand All @@ -31,29 +32,29 @@ namespace Buffer {

static const unsigned int kMaxLength = smalloc::kMaxLength;

bool HasInstance(v8::Handle<v8::Value> val);
bool HasInstance(v8::Handle<v8::Object> val);
char* Data(v8::Handle<v8::Value> val);
char* Data(v8::Handle<v8::Object> val);
size_t Length(v8::Handle<v8::Value> val);
size_t Length(v8::Handle<v8::Object> val);
NODE_EXTERN bool HasInstance(v8::Handle<v8::Value> val);
NODE_EXTERN bool HasInstance(v8::Handle<v8::Object> val);
NODE_EXTERN char* Data(v8::Handle<v8::Value> val);
NODE_EXTERN char* Data(v8::Handle<v8::Object> val);
NODE_EXTERN size_t Length(v8::Handle<v8::Value> val);
NODE_EXTERN size_t Length(v8::Handle<v8::Object> val);

// public constructor
v8::Local<v8::Object> New(size_t length);
NODE_EXTERN v8::Local<v8::Object> New(size_t length);
// public constructor from string
v8::Local<v8::Object> New(v8::Handle<v8::String> string);
NODE_EXTERN v8::Local<v8::Object> New(v8::Handle<v8::String> string);
// public constructor - data is copied
// TODO(trevnorris): should be something like Copy()
v8::Local<v8::Object> New(const char* data, size_t len);
NODE_EXTERN v8::Local<v8::Object> New(const char* data, size_t len);
// public constructor - data is used, callback is passed data on object gc
v8::Local<v8::Object> New(char* data,
size_t length,
smalloc::FreeCallback callback,
void* hint);
NODE_EXTERN v8::Local<v8::Object> New(char* data,
size_t length,
smalloc::FreeCallback callback,
void* hint);

// public constructor - data is used.
// TODO(trevnorris): should be New() for consistency
v8::Local<v8::Object> Use(char* data, uint32_t len);
NODE_EXTERN v8::Local<v8::Object> Use(char* data, uint32_t len);

} // namespace Buffer

Expand Down
27 changes: 14 additions & 13 deletions src/smalloc.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#ifndef NODE_SMALLOC_H_
#define NODE_SMALLOC_H_

#include "node.h"
#include "v8.h"

namespace node {
Expand All @@ -38,29 +39,29 @@ namespace smalloc {
// mirrors deps/v8/src/objects.h
static const unsigned int kMaxLength = 0x3fffffff;

typedef void (*FreeCallback)(char* data, void* hint);
NODE_EXTERN typedef void (*FreeCallback)(char* data, void* hint);

/**
* Allocate external memory and set to passed object. If data is passed then
* will use that instead of allocating new.
*/
void Alloc(v8::Handle<v8::Object> obj, size_t length);
void Alloc(v8::Handle<v8::Object> obj, char* data, size_t length);
void Alloc(v8::Handle<v8::Object> obj,
size_t length,
FreeCallback fn,
void* hint);
void Alloc(v8::Handle<v8::Object> obj,
char* data,
size_t length,
FreeCallback fn,
void* hint);
NODE_EXTERN void Alloc(v8::Handle<v8::Object> obj, size_t length);
NODE_EXTERN void Alloc(v8::Handle<v8::Object> obj, char* data, size_t length);
NODE_EXTERN void Alloc(v8::Handle<v8::Object> obj,
size_t length,
FreeCallback fn,
void* hint);
NODE_EXTERN void Alloc(v8::Handle<v8::Object> obj,
char* data,
size_t length,
FreeCallback fn,
void* hint);

/**
* Free memory associated with an externally allocated object. If no external
* memory is allocated to the object then nothing will happen.
*/
void AllocDispose(v8::Handle<v8::Object> obj);
NODE_EXTERN void AllocDispose(v8::Handle<v8::Object> obj);

} // namespace smalloc

Expand Down