本文整理汇总了C++中ustring::Rep::deref方法的典型用法代码示例。如果您正苦于以下问题:C++ Rep::deref方法的具体用法?C++ Rep::deref怎么用?C++ Rep::deref使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ustring::Rep
的用法示例。
在下文中一共展示了Rep::deref方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: spliceSubstringsWithSeparators
UString UString::spliceSubstringsWithSeparators(const Range *substringRanges, int rangeCount, const UString *separators, int separatorCount) const
{
int totalLength = 0;
for (int i = 0; i < rangeCount; i++) {
totalLength += substringRanges[i].length;
}
for (int i = 0; i < separatorCount; i++) {
totalLength += separators[i].size();
}
UChar *buffer = static_cast<UChar *>(malloc(totalLength * sizeof(UChar)));
int maxCount = MAX(rangeCount, separatorCount);
int bufferPos = 0;
for (int i = 0; i < maxCount; i++) {
if (i < rangeCount) {
memcpy(buffer + bufferPos, data() + substringRanges[i].position, substringRanges[i].length * sizeof(UChar));
bufferPos += substringRanges[i].length;
}
if (i < separatorCount) {
memcpy(buffer + bufferPos, separators[i].data(), separators[i].size() * sizeof(UChar));
bufferPos += separators[i].size();
}
}
UString::Rep *rep = UString::Rep::create(buffer, totalLength);
UString result = UString(rep);
rep->deref();
return result;
}
示例2: clear
void PropertyMap::clear()
{
if (!_table) {
#if USE_SINGLE_ENTRY
UString::Rep *key = _singleEntry.key;
if (key) {
key->deref();
_singleEntry.key = 0;
}
#endif
return;
}
int size = _table->size;
Entry *entries = _table->entries;
for (int i = 0; i < size; i++) {
UString::Rep *key = entries[i].key;
if (isValid(key)) {
key->deref();
entries[i].key = 0;
entries[i].value = 0;
}
}
_table->keyCount = 0;
_table->sentinelCount = 0;
}
示例3: JSStringRelease
EXPORT
void JSStringRelease(JSStringRef string)
{
JSLock lock;
UString::Rep* rep = toJS(string);
rep->deref();
}
示例4: fastFree
PropertyMap::~PropertyMap()
{
if (!_table) {
#if USE_SINGLE_ENTRY
UString::Rep *key = _singleEntry.key;
if (key)
key->deref();
#endif
return;
}
int minimumKeysToProcess = _table->keyCount + _table->sentinelCount;
Entry *entries = _table->entries;
for (int i = 0; i < minimumKeysToProcess; i++) {
UString::Rep *key = entries[i].key;
if (key) {
if (key != deletedSentinel())
key->deref();
} else
++minimumKeysToProcess;
}
fastFree(_table);
}
示例5: substr
UString UString::substr(int pos, int len) const
{
if (pos < 0)
pos = 0;
else if (pos >= (int) size())
pos = size();
if (len < 0)
len = size();
if (pos + len >= (int) size())
len = size() - pos;
UString::Rep *newRep = Rep::create(rep, pos, len);
UString result(newRep);
newRep->deref();
return result;
}
示例6: substr
UString UString::substr(int pos, int len) const
{
int s = size();
if (pos < 0)
pos = 0;
else if (pos >= s)
pos = s;
if (len < 0)
len = s;
if (pos + len >= s)
len = s - pos;
if (pos == 0 && len == s)
return *this;
UString::Rep *newRep = Rep::create(rep, pos, len);
UString result(newRep);
newRep->deref();
return result;
}
示例7: remove
void PropertyMap::remove(const Identifier &name)
{
assert(!name.isNull());
checkConsistency();
UString::Rep *rep = name._ustring.rep();
UString::Rep *key;
if (!_table) {
#if USE_SINGLE_ENTRY
key = _singleEntry.key;
if (rep == key) {
key->deref();
_singleEntry.key = 0;
checkConsistency();
}
#endif
return;
}
// Find the thing to remove.
unsigned h = rep->hash();
int sizeMask = _table->sizeMask;
Entry *entries = _table->entries;
int i = h & sizeMask;
int k = 0;
#if DUMP_STATISTICS
++numProbes;
++numRemoves;
numCollisions += entries[i].key && entries[i].key != rep;
#endif
while ((key = entries[i].key)) {
if (rep == key)
break;
if (k == 0)
k = 1 | (h % sizeMask);
i = (i + k) & sizeMask;
#if DUMP_STATISTICS
++numRehashes;
#endif
}
if (!key)
return;
// Replace this one element with the deleted sentinel. Also set value to 0 and attributes to DontEnum
// to help callers that iterate all keys not have to check for the sentinel.
key->deref();
key = deletedSentinel();
entries[i].key = key;
entries[i].value = 0;
entries[i].attributes = DontEnum;
assert(_table->keyCount >= 1);
--_table->keyCount;
++_table->sentinelCount;
if (_table->sentinelCount * 4 >= _table->size)
rehash();
checkConsistency();
}