本文整理汇总了C++中DataNode::getHash方法的典型用法代码示例。如果您正苦于以下问题:C++ DataNode::getHash方法的具体用法?C++ DataNode::getHash怎么用?C++ DataNode::getHash使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DataNode
的用法示例。
在下文中一共展示了DataNode::getHash方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: get
int* LBEHashMap::get(std::string key) {
lock.lock();
char* hash = hashKey(key, keySize);
Node* local = head;
for (int R = 0; R < keySize; R += 1) {
int pos = (int) hash[R];
Node* node = getNode(local, pos);
if (isArrayNode(node)) {
local = node;
} else {
DataNode* dataNode = dynamic_cast<DataNode*>(node);
if ((dataNode != nullptr) && hashEqual(dataNode->getHash(), hash, keySize)) {
lock.unlock();
return &(dataNode->value);
} else {
lock.unlock();
return nullptr;
}
}
}
lock.unlock();
return nullptr;
}
示例2: put
bool LBEHashMap::put(std::string key, int value) {
lock.lock();
char* hash = hashKey(key, keySize);
Node* insertThis = allocateNode(value, key, keySize);
Node* local = head;
for (int R = 0; R < keySize; R++) {
int pos = (int) hash[R];
Node* node = getNode(local, pos);
if (isArrayNode(node)) {
local = node;
} else {
DataNode* dataNode = dynamic_cast<DataNode*>(node);
if (dataNode == nullptr) {
//adding new node
dynamic_cast<ArrayNode*>(local)->array[pos] = insertThis;
lock.unlock();
return true;
} else if (hashEqual(dataNode->getHash(), hash, keySize)) {
//replace old node
dynamic_cast<ArrayNode*>(local)->array[pos] = insertThis;
delete node;
lock.unlock();
return true;
} else {
//expand
local = expandTable(local, pos, insertThis, R);
}
}
}
lock.unlock();
return false;
}