Skip to content

Commit 1e33cdf

Browse files
author
Isaac Wagner
committed
* Value types are persistent handles rather than strings
* Added a handful of function signatures to hashtable.h * Close the handle scope in HashTable::Get() if the key is not found
1 parent a9cf86c commit 1e33cdf

File tree

2 files changed

+26
-14
lines changed

2 files changed

+26
-14
lines changed

src/hashtable.cpp

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,12 @@ Handle<Value> HashTable::Put(const Arguments& args) {
4545
Local<Value> value = Local<Value>(args[1]);
4646

4747
String::AsciiValue keyStr(key);
48-
String::AsciiValue valueStr(value);
4948

50-
//Persistent<Value> persistent = Persistent<Value>::New(value);
49+
Persistent<Value> persistent = Persistent<Value>::New(value);
5150

5251
HashTable *obj = ObjectWrap::Unwrap<HashTable>(args.This());
5352
//obj->map.insert(std::pair<std::string, Persistent<Value>>(std::string(*ascii), persistent));
54-
obj->map.insert(std::pair<std::string, std::string>(std::string(*keyStr), std::string(*valueStr)));
53+
obj->map.insert(std::pair<std::string, Persistent<Value>>(std::string(*keyStr), persistent));
5554

5655
//Return undefined
5756
return scope.Close(Handle<Value>());
@@ -66,20 +65,13 @@ Handle<Value> HashTable::Get(const Arguments& args) {
6665
Local<Value> key = Local<Value>(args[0]);
6766
String::AsciiValue keyStr(key);
6867

69-
//std::unordered_map<std::string,Persistent<Value>>::const_iterator itr = obj->map.find(std::string(*keyAscii));
70-
std::unordered_map<std::string,std::string>::const_iterator itr = obj->map.find(std::string(*keyStr));
68+
MapType::const_iterator itr = obj->map.find(std::string(*keyStr));
7169

7270
if(itr == obj->map.end()) {
73-
return Handle<Value>(); //undefined
71+
return scope.Close(Handle<Value>()); //return undefined
7472
}
7573

76-
/*Persistent<Value> persistent = itr->second;
77-
String::AsciiValue persistentAscii(persistent);
78-
std::cout << "key: '" << *keyAscii << "' value: '" << *persistentAscii << "'" << std::endl;*/
79-
//Handle<Value> value = itr->second;
80-
81-
std::string str = itr->second;
82-
Handle<Value> value = String::New(str.c_str());
74+
Persistent<Value> value = itr->second;
8375

8476
return scope.Close(value);
8577
}

src/hashtable.h

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,32 @@ class HashTable : public node::ObjectWrap {
1313
HashTable(size_t buckets);
1414
~HashTable();
1515

16-
std::unordered_map<std::string, std::string> map;
16+
typedef std::unordered_map<std::string,v8::Persistent<v8::Value>> MapType;
17+
MapType map;
1718

19+
//new HashTable() or new HashTable(buckets)
1820
static v8::Handle<v8::Value> Constructor(const v8::Arguments &args);
21+
22+
//hashTable.get(key) : value
1923
static v8::Handle<v8::Value> Get(const v8::Arguments &args);
24+
25+
//hashTable.put(key, value)
2026
static v8::Handle<v8::Value> Put(const v8::Arguments &args);
27+
28+
//hashTable.remove(key)
29+
static v8::Handle<v8::Value> Remove(const v8::Arguments &args);
30+
31+
//hashTable.clear()
32+
static v8::Handle<v8::Value> Clear(const v8::Arguments &args);
33+
34+
//hashTable.size() : number of elements
2135
static v8::Handle<v8::Value> Size(const v8::Arguments &args);
36+
37+
//hashTable.rehash(buckets)
38+
static v8::Handle<v8::Value> Rehash(const v8::Arguments &args);
39+
40+
//hashTable.reserve(size)
41+
static v8::Handle<v8::Value> Reserve(const v8::Arguments &args);
2242
};
2343

2444
#endif

0 commit comments

Comments
 (0)