[Pkg-javascript-commits] [node-leveldown] 308/492: replace some macros with static inline functions

Andrew Kelley andrewrk-guest at moszumanska.debian.org
Sun Jul 6 17:14:11 UTC 2014


This is an automated email from the git hooks/post-receive script.

andrewrk-guest pushed a commit to annotated tag rocksdb-0.10.1
in repository node-leveldown.

commit 7a22f5401468f86627bc759e3b34f0ec47fe6ba9
Author: Rod Vagg <rod at vagg.org>
Date:   Mon Apr 8 10:21:40 2013 +1000

    replace some macros with static inline functions
---
 src/batch.cc     |  2 +-
 src/database.cc  | 52 +++++++++++++++++++++++++++----------
 src/iterator.cc  | 19 ++++++++------
 src/leveldown.cc |  4 +--
 src/leveldown.h  | 79 ++++++++++++++++++++++++++++++++++----------------------
 5 files changed, 100 insertions(+), 56 deletions(-)

diff --git a/src/batch.cc b/src/batch.cc
index 4762c8f..4b8448e 100644
--- a/src/batch.cc
+++ b/src/batch.cc
@@ -67,7 +67,7 @@ v8::Handle<v8::Value> Batch::New (const v8::Arguments& args) {
     optionsObj = v8::Local<v8::Object>::Cast(args[1]);
   }
 
-  LD_BOOLEAN_OPTION_VALUE(optionsObj, sync)
+  bool sync = BooleanOptionValue(optionsObj, option_sync);
 
   Batch* batch = new Batch(database, sync);
   batch->Wrap(args.This());
diff --git a/src/database.cc b/src/database.cc
index 0539610..d5fbf46 100644
--- a/src/database.cc
+++ b/src/database.cc
@@ -168,7 +168,7 @@ v8::Handle<v8::Value> Database::New (const v8::Arguments& args) {
     LD_THROW_RETURN(leveldown() requires a location string argument)
   }
 
-  LD_FROM_V8_STRING(location, v8::Handle<v8::String>::Cast(args[0]))
+  char* location = FromV8String(args[0]);
 
   Database* obj = new Database(location);
   obj->Wrap(args.This());
@@ -196,14 +196,38 @@ v8::Handle<v8::Value> Database::Open (const v8::Arguments& args) {
 
   LD_METHOD_SETUP_COMMON(open, 0, 1)
 
-  LD_BOOLEAN_OPTION_VALUE_DEFTRUE(optionsObj, createIfMissing)
-  LD_BOOLEAN_OPTION_VALUE(optionsObj, errorIfExists)
-  LD_BOOLEAN_OPTION_VALUE(optionsObj, compression)
-  LD_UINT32_OPTION_VALUE(optionsObj, cacheSize            , 8 << 20 )
-  LD_UINT32_OPTION_VALUE(optionsObj, writeBufferSize      , 4 << 20 )
-  LD_UINT32_OPTION_VALUE(optionsObj, blockSize            , 4096    )
-  LD_UINT32_OPTION_VALUE(optionsObj, maxOpenFiles         , 1000    )
-  LD_UINT32_OPTION_VALUE(optionsObj, blockRestartInterval , 16      )
+  bool createIfMissing = BooleanOptionValueDefTrue(
+      optionsObj
+    , option_createIfMissing
+  );
+  bool errorIfExists = BooleanOptionValue(optionsObj, option_errorIfExists);
+  bool compression = BooleanOptionValue(optionsObj, option_compression);
+
+  uint32_t cacheSize = UInt32OptionValue(
+      optionsObj
+    , option_cacheSize
+    , 8 << 20
+  );
+  uint32_t writeBufferSize = UInt32OptionValue(
+      optionsObj
+    , option_writeBufferSize
+    , 4 << 20
+  );
+  uint32_t blockSize = UInt32OptionValue(
+      optionsObj
+    , option_blockSize
+    , 4096
+  );
+  uint32_t maxOpenFiles = UInt32OptionValue(
+      optionsObj
+    , option_maxOpenFiles
+    , 1000
+  );
+  uint32_t blockRestartInterval = UInt32OptionValue(
+      optionsObj
+    , option_blockRestartInterval
+    , 16
+  );
 
   OpenWorker* worker = new OpenWorker(
       database
@@ -290,7 +314,7 @@ v8::Handle<v8::Value> Database::Put (const v8::Arguments& args) {
   v8::Persistent<v8::Value> valueBuffer =
       v8::Persistent<v8::Value>::New(LD_NODE_ISOLATE_PRE valueBufferV);
 
-  LD_BOOLEAN_OPTION_VALUE(optionsObj, sync)
+  bool sync = BooleanOptionValue(optionsObj, option_sync);
 
   WriteWorker* worker  = new WriteWorker(
       database
@@ -320,8 +344,8 @@ v8::Handle<v8::Value> Database::Get (const v8::Arguments& args) {
       LD_NODE_ISOLATE_PRE
       keyBufferV);
 
-  LD_BOOLEAN_OPTION_VALUE_DEFTRUE(optionsObj, asBuffer)
-  LD_BOOLEAN_OPTION_VALUE_DEFTRUE(optionsObj, fillCache)
+  bool asBuffer = BooleanOptionValueDefTrue(optionsObj, option_asBuffer);
+  bool fillCache = BooleanOptionValueDefTrue(optionsObj, option_fillCache);
 
   ReadWorker* worker = new ReadWorker(
       database
@@ -349,7 +373,7 @@ v8::Handle<v8::Value> Database::Delete (const v8::Arguments& args) {
   v8::Persistent<v8::Value> keyBuffer =
       v8::Persistent<v8::Value>::New(LD_NODE_ISOLATE_PRE keyBufferV);
 
-  LD_BOOLEAN_OPTION_VALUE(optionsObj, sync)
+  bool sync = BooleanOptionValue(optionsObj, option_sync);
 
   DeleteWorker* worker = new DeleteWorker(
       database
@@ -383,7 +407,7 @@ v8::Handle<v8::Value> Database::Batch (const v8::Arguments& args) {
 
   LD_METHOD_SETUP_COMMON(batch, 1, 2)
 
-  LD_BOOLEAN_OPTION_VALUE(optionsObj, sync)
+  bool sync = BooleanOptionValue(optionsObj, option_sync);
 
   v8::Local<v8::Array> array = v8::Local<v8::Array>::Cast(args[0]);
 
diff --git a/src/iterator.cc b/src/iterator.cc
index 870294a..6381764 100644
--- a/src/iterator.cc
+++ b/src/iterator.cc
@@ -259,7 +259,7 @@ v8::Handle<v8::Value> Iterator::New (const v8::Arguments& args) {
       startBuffer = v8::Local<v8::Value>::New(optionsObj->Get(option_start));
 
       // ignore start if it has size 0 since a Slice can't have length 0
-      if (LD_STRING_OR_BUFFER_LENGTH(startBuffer) > 0) {
+      if (StringOrBufferLength(startBuffer) > 0) {
         LD_STRING_OR_BUFFER_TO_SLICE(_start, startBuffer, start)
         start = new leveldb::Slice(_start.data(), _start.size());
       }
@@ -273,7 +273,7 @@ v8::Handle<v8::Value> Iterator::New (const v8::Arguments& args) {
           v8::Local<v8::Value>::New(optionsObj->Get(option_end));
 
       // ignore end if it has size 0 since a Slice can't have length 0
-      if (LD_STRING_OR_BUFFER_LENGTH(endBuffer) > 0) {
+      if (StringOrBufferLength(endBuffer) > 0) {
         LD_STRING_OR_BUFFER_TO_SLICE(_end, endBuffer, end)
         end = new std::string(_end.data(), _end.size());
       }
@@ -285,12 +285,15 @@ v8::Handle<v8::Value> Iterator::New (const v8::Arguments& args) {
     }
   }
 
-  LD_BOOLEAN_OPTION_VALUE(optionsObj, reverse)
-  LD_BOOLEAN_OPTION_VALUE_DEFTRUE(optionsObj, keys)
-  LD_BOOLEAN_OPTION_VALUE_DEFTRUE(optionsObj, values)
-  LD_BOOLEAN_OPTION_VALUE_DEFTRUE(optionsObj, keyAsBuffer)
-  LD_BOOLEAN_OPTION_VALUE_DEFTRUE(optionsObj, valueAsBuffer)
-  LD_BOOLEAN_OPTION_VALUE(optionsObj, fillCache)
+  bool reverse      = BooleanOptionValue(optionsObj, option_reverse);
+  bool keys         = BooleanOptionValueDefTrue(optionsObj, option_keys);
+  bool values       = BooleanOptionValueDefTrue(optionsObj, option_values);
+  bool keyAsBuffer  = BooleanOptionValueDefTrue(optionsObj, option_keyAsBuffer);
+  bool valueAsBuffer = BooleanOptionValueDefTrue(
+      optionsObj
+    , option_valueAsBuffer
+  );
+  bool fillCache    = BooleanOptionValue(optionsObj, option_fillCache);
 
   Iterator* iterator = new Iterator(
       database
diff --git a/src/leveldown.cc b/src/leveldown.cc
index 209119f..03f7c01 100644
--- a/src/leveldown.cc
+++ b/src/leveldown.cc
@@ -28,7 +28,7 @@ v8::Handle<v8::Value> DestroyDB (const v8::Arguments& args) {
     LD_THROW_RETURN(leveldown() requires a callback function argument)
   }
 
-  LD_FROM_V8_STRING(location, v8::Handle<v8::String>::Cast(args[0]))
+  char* location = FromV8String(args[0]);
 
   v8::Persistent<v8::Function> callback = v8::Persistent<v8::Function>::New(
       LD_NODE_ISOLATE_PRE
@@ -60,7 +60,7 @@ v8::Handle<v8::Value> RepairDB (const v8::Arguments& args) {
     LD_THROW_RETURN(leveldown() requires a callback function argument)
   }
 
-  LD_FROM_V8_STRING(location, v8::Handle<v8::String>::Cast(args[0]))
+  char* location = FromV8String(args[0]);
 
   v8::Persistent<v8::Function> callback = v8::Persistent<v8::Function>::New(
       LD_NODE_ISOLATE_PRE
diff --git a/src/leveldown.h b/src/leveldown.h
index c105227..49fd2fe 100644
--- a/src/leveldown.h
+++ b/src/leveldown.h
@@ -5,7 +5,54 @@
 #ifndef LD_LEVELDOWN_H
 #define LD_LEVELDOWN_H
 
-#include <v8.h>
+#include <node.h>
+#include <node_buffer.h>
+
+static inline char* FromV8String(v8::Local<v8::Value> from) {
+  size_t sz_;
+  char* to;
+  v8::Local<v8::String> toStr = from->ToString();
+  sz_ = toStr->Utf8Length();
+  to = new char[sz_ + 1];
+  toStr->WriteUtf8(to, -1, NULL, v8::String::NO_OPTIONS);
+  return to;
+}
+
+static inline size_t StringOrBufferLength(v8::Local<v8::Value> obj) {
+  return node::Buffer::HasInstance(obj->ToObject())
+    ? node::Buffer::Length(obj->ToObject())
+    : obj->ToString()->Utf8Length();
+}
+
+static inline bool BooleanOptionValue(
+      v8::Local<v8::Object> optionsObj
+    , v8::Handle<v8::String> opt) {
+
+  return !optionsObj.IsEmpty()
+    && optionsObj->Has(opt)
+    && optionsObj->Get(opt)->BooleanValue();
+}
+
+static inline bool BooleanOptionValueDefTrue(
+      v8::Local<v8::Object> optionsObj
+    , v8::Handle<v8::String> opt) {
+
+  return optionsObj.IsEmpty()
+    || !optionsObj->Has(opt)
+    || optionsObj->Get(opt)->BooleanValue();
+}
+
+static inline uint32_t UInt32OptionValue(
+      v8::Local<v8::Object> optionsObj
+    , v8::Handle<v8::String> opt
+    , uint32_t def) {
+
+  return !optionsObj.IsEmpty()
+    && optionsObj->Has(opt)
+    && optionsObj->Get(opt)->IsUint32()
+      ? optionsObj->Get(opt)->Uint32Value()
+      : def;
+}
 
 // node_isolate stuff introduced with V8 upgrade, see https://github.com/joyent/node/pull/5077
 #if NODE_MODULE_VERSION > 0x000B
@@ -32,14 +79,6 @@
     LD_RETURN_CALLBACK_OR_ERROR(callback, #name " cannot be `null` or `undefined`") \
   }
 
-#define LD_FROM_V8_STRING(to, from)                                            \
-  size_t to ## Sz_;                                                            \
-  char* to;                                                                    \
-  v8::Local<v8::String> to ## Str = from->ToString();                          \
-  to ## Sz_ = to ## Str->Utf8Length();                                         \
-  to = new char[to ## Sz_ + 1];                                                \
-  to ## Str->WriteUtf8(to, -1, NULL, v8::String::NO_OPTIONS);
-
 #define LD_STRING_OR_BUFFER_TO_SLICE(to, from, name)                           \
   size_t to ## Sz_;                                                            \
   char* to ## Ch_;                                                             \
@@ -64,28 +103,6 @@
   }                                                                            \
   leveldb::Slice to(to ## Ch_, to ## Sz_);
 
-#define LD_STRING_OR_BUFFER_LENGTH(obj)                                        \
-  node::Buffer::HasInstance(obj->ToObject())                                   \
-    ? node::Buffer::Length(obj->ToObject())                                    \
-    : obj->ToString()->Utf8Length()
-
-#define LD_BOOLEAN_OPTION_VALUE(optionsObj, opt)                               \
-  bool opt = !optionsObj.IsEmpty()                                             \
-    && optionsObj->Has(option_ ## opt)                                         \
-    && optionsObj->Get(option_ ## opt)->BooleanValue();
-
-#define LD_BOOLEAN_OPTION_VALUE_DEFTRUE(optionsObj, opt)                       \
-  bool opt = optionsObj.IsEmpty()                                              \
-    || !optionsObj->Has(option_ ## opt)                                        \
-    || optionsObj->Get(option_ ## opt)->BooleanValue();
-
-#define LD_UINT32_OPTION_VALUE(optionsObj, opt, default)                       \
-  uint32_t opt = !optionsObj.IsEmpty()                                         \
-    && optionsObj->Has(option_ ## opt)                                         \
-    && optionsObj->Get(option_ ## opt)->IsUint32()                             \
-      ? optionsObj->Get(option_ ## opt)->Uint32Value()                         \
-      : default;
-
 #define LD_RETURN_CALLBACK_OR_ERROR(callback, msg)                             \
   if (!callback.IsEmpty() && callback->IsFunction()) {                         \
     v8::Local<v8::Value> argv[] = {                                            \

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-leveldown.git



More information about the Pkg-javascript-commits mailing list