@@ -75,17 +75,16 @@ Handle<Value> HashTable::Constructor(const Arguments& args) {
7575Handle<Value> HashTable::Get (const Arguments& args) {
7676 HandleScope scope;
7777
78- if (args.Length () < 1 || !args[ 0 ]-> IsString () ) {
78+ if (args.Length () < 1 ) {
7979 ThrowException (Exception::TypeError (String::New (" Wrong arguments" )));
8080 return scope.Close (Undefined ());
8181 }
8282
8383 HashTable *obj = ObjectWrap::Unwrap<HashTable>(args.This ());
8484
85- Local<Value> key = Local<Value>(args[0 ]);
86- String::Utf8Value keyStr (key);
85+ Persistent<Value> key = Persistent<Value>(args[0 ]);
8786
88- MapType::const_iterator itr = obj->map .find (std::string (*keyStr) );
87+ MapType::const_iterator itr = obj->map .find (key );
8988
9089 if (itr == obj->map .end ()) {
9190 return scope.Close (Undefined ()); // return undefined
@@ -99,17 +98,16 @@ Handle<Value> HashTable::Get(const Arguments& args) {
9998Handle<Value> HashTable::Has (const Arguments& args) {
10099 HandleScope scope;
101100
102- if (args.Length () < 1 || !args[ 0 ]-> IsString () ) {
101+ if (args.Length () < 1 ) {
103102 ThrowException (Exception::TypeError (String::New (" Wrong arguments" )));
104103 return scope.Close (Undefined ());
105104 }
106105
107106 HashTable *obj = ObjectWrap::Unwrap<HashTable>(args.This ());
108107
109- Local<Value> key = Local<Value>(args[0 ]);
110- String::Utf8Value keyStr (key);
108+ Persistent<Value> key = Persistent<Value>(args[0 ]);
111109
112- MapType::const_iterator itr = obj->map .find (std::string (*keyStr) );
110+ MapType::const_iterator itr = obj->map .find (key );
113111
114112 if (itr == obj->map .end ()) {
115113 return scope.Close (Boolean::New (false )); // return undefined
@@ -121,19 +119,17 @@ Handle<Value> HashTable::Has(const Arguments& args) {
121119Handle<Value> HashTable::Put (const Arguments& args) {
122120 HandleScope scope;
123121
124- if (args.Length () < 2 || !args[ 0 ]-> IsString () ) {
122+ if (args.Length () < 2 ) {
125123 ThrowException (Exception::TypeError (String::New (" Wrong arguments" )));
126124 return scope.Close (Undefined ());
127125 }
128126
129127 HashTable *obj = ObjectWrap::Unwrap<HashTable>(args.This ());
130128
131- Local <Value> key = Local <Value>(args[0 ]);
129+ Persistent <Value> key = Persistent <Value>(args[0 ]);
132130 Local<Value> value = Local<Value>(args[1 ]);
133131
134- String::Utf8Value keyStr (key);
135-
136- MapType::const_iterator itr = obj->map .find (std::string (*keyStr));
132+ MapType::const_iterator itr = obj->map .find (key);
137133
138134 // overwriting an existing value
139135 if (itr != obj->map .end ()) {
@@ -143,7 +139,7 @@ Handle<Value> HashTable::Put(const Arguments& args) {
143139
144140 Persistent<Value> persistent = Persistent<Value>::New (value);
145141
146- obj->map .insert (std::pair<std::string , Persistent<Value> >(std::string (*keyStr) , persistent));
142+ obj->map .insert (std::pair<Persistent<Value> , Persistent<Value> >(key , persistent));
147143
148144 // Return undefined
149145 return scope.Close (Undefined ());
@@ -158,7 +154,7 @@ Handle<Value> HashTable::Keys(const Arguments& args) {
158154
159155 int i = 0 ;
160156 for (auto itr = obj->map .begin (); itr != obj->map .end (); ++itr, ++i) {
161- array->Set (Integer::New (i), String::New ( itr->first . c_str ()) );
157+ array->Set (Integer::New (i), itr->first );
162158 }
163159
164160 return scope.Close (array);
@@ -198,17 +194,16 @@ Handle<Value> HashTable::MapValues(const Arguments& args) {
198194Handle<Value> HashTable::Remove (const Arguments& args) {
199195 HandleScope scope;
200196
201- if (args.Length () < 1 || !args[ 0 ]-> IsString () ) {
197+ if (args.Length () < 1 ) {
202198 ThrowException (Exception::TypeError (String::New (" Wrong arguments" )));
203199 return scope.Close (Boolean::New (false ));
204200 }
205201
206202 HashTable *obj = ObjectWrap::Unwrap<HashTable>(args.This ());
207203
208- Local<Value> key = Local<Value>(args[0 ]);
209- String::Utf8Value keyStr (key);
204+ Persistent<Value> key = Persistent<Value>(args[0 ]);
210205
211- auto itr = obj->map .find (std::string (*keyStr) );
206+ auto itr = obj->map .find (key );
212207
213208 if (itr == obj->map .end ()) {
214209 return scope.Close (Boolean::New (false )); // do nothing and return false
@@ -317,7 +312,7 @@ Handle<Value> HashTable::ForEach(const Arguments& args) {
317312 MapType::const_iterator itr = obj->map .begin ();
318313
319314 while (itr != obj->map .end ()) {
320- argv[0 ] = Persistent<Value>::New (String::New ( itr->first . c_str ()) );
315+ argv[0 ] = Persistent<Value>::New (itr->first );
321316 argv[1 ] = Persistent<Value>::New (itr->second );
322317 cb->Call (ctx, argc, argv);
323318 itr++;
@@ -351,7 +346,7 @@ Handle<Value> HashTable::MapForEach(const Arguments& args) {
351346
352347 while (itr != obj->map .end ()) {
353348 argv[0 ] = Persistent<Value>::New (itr->second );
354- argv[1 ] = Persistent<Value>::New (String::New ( itr->first . c_str ()) );
349+ argv[1 ] = Persistent<Value>::New (itr->first );
355350 cb->Call (ctx, argc, argv);
356351 itr++;
357352 }
0 commit comments