本文整理汇总了C++中checkSane函数的典型用法代码示例。如果您正苦于以下问题:C++ checkSane函数的具体用法?C++ checkSane怎么用?C++ checkSane使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了checkSane函数的16个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: assert
StringData* StringData::reserve(size_t cap) {
assert(!isImmutable() && !hasMultipleRefs());
assert(isFlat());
if (cap <= capacity()) return this;
cap = std::min(cap + cap / 4, size_t(MaxSize) + 1);
auto const allocRet = allocFlatForLen(cap);
auto const sd = allocRet.first;
auto const cc = allocRet.second;
auto const data = reinterpret_cast<char*>(sd + 1);
sd->m_data = data;
sd->m_hdr.init(cc, HeaderKind::String, 1);
// request-allocated StringData are always aligned at 16 bytes, thus it is
// safe to copy in 16-byte groups. This copies m_lenAndHash (8 bytes), the
// characters (m_len bytes), add the trailing zero (1 byte).
memcpy16_inline(&sd->m_lenAndHash, &m_lenAndHash,
(m_len + 8 + 1 + 15) & ~0xF);
assertx(reinterpret_cast<uintptr_t>(&m_lenAndHash) + 8 ==
reinterpret_cast<uintptr_t>(m_data));
assertx(reinterpret_cast<uintptr_t>(&m_lenAndHash) % 16 == 0);
assert(sd->hasExactlyOneRef());
assert(sd->isFlat());
assert(sd->checkSane());
return sd;
}
开发者ID:stevedien,项目名称:hhvm,代码行数:29,代码来源:string-data.cpp
示例2: MM
NEVER_INLINE
StringData* StringData::MakeSVSlowPath(APCString* shared, uint32_t len) {
auto const data = shared->getStringData();
auto const hash = data->m_hash & STRHASH_MASK;
auto const capAndHash = static_cast<uint64_t>(hash) << 32;
auto const sd = static_cast<StringData*>(
MM().smartMallocSize(sizeof(StringData) + sizeof(SharedPayload))
);
sd->m_data = const_cast<char*>(data->m_data);
sd->m_lenAndCount = len;
sd->m_capAndHash = capAndHash;
sd->sharedPayload()->shared = shared;
sd->enlist();
shared->getHandle()->reference();
assert(sd->m_len == len);
assert(sd->m_count == 0);
assert(sd->m_cap == 0); // cap == 0 means shared
assert(sd->m_hash == hash);
assert(sd->checkSane());
return sd;
}
开发者ID:2bj,项目名称:hhvm,代码行数:25,代码来源:apc-string.cpp
示例3: assert
StringData* StringData::reserve(size_t cap) {
assert(!isImmutable() && !hasMultipleRefs());
assert(isFlat());
if (cap <= capacity()) return this;
cap = std::min(cap + cap / 4, size_t(MaxSize));
auto const sd = allocFlatForLenSmall(cap);
// Request-allocated StringData are always aligned at 16 bytes, thus it is
// safe to copy in 16-byte groups.
#ifdef NO_M_DATA
// layout: [m_lenAndHash][header][...data]
sd->m_lenAndHash = m_lenAndHash;
// This copies the characters (m_len bytes), and the trailing zero (1 byte)
memcpy16_inline(sd+1, this+1, (m_len + 1 + 15) & ~0xF);
assertx(reinterpret_cast<uintptr_t>(this+1) % 16 == 0);
#else
// layout: [m_data][header][m_lenAndHash][...data]
// This copies m_lenAndHash (8 bytes), the characters (m_len bytes),
// and the trailing zero (1 byte).
memcpy16_inline(&sd->m_lenAndHash, &m_lenAndHash,
(m_len + 8 + 1 + 15) & ~0xF);
assertx(reinterpret_cast<uintptr_t>(&m_lenAndHash) + 8 ==
reinterpret_cast<uintptr_t>(m_data));
assertx(reinterpret_cast<uintptr_t>(&m_lenAndHash) % 16 == 0);
#endif
assert(sd->hasExactlyOneRef());
assert(sd->isFlat());
assert(sd->checkSane());
return sd;
}
开发者ID:gdbentley,项目名称:hhvm,代码行数:33,代码来源:string-data.cpp
示例4: throw_string_too_large
// Create either a static or an uncounted string.
// Diffrence between static and uncounted is in the lifetime
// of the string. Static are alive for the lifetime of the process.
// Uncounted are not ref counted but will be deleted at some point.
ALWAYS_INLINE
StringData* StringData::MakeShared(StringSlice sl, bool trueStatic) {
if (UNLIKELY(sl.len > StringData::MaxSize)) {
throw_string_too_large(sl.len);
}
auto const cc = CapCode::ceil(sl.len);
auto const need = cc.decode() + kCapOverhead;
auto const sd = static_cast<StringData*>(
trueStatic ? low_malloc(need) : malloc(need)
);
auto const data = reinterpret_cast<char*>(sd + 1);
sd->m_data = data;
auto const count = trueStatic ? StaticValue : UncountedValue;
sd->m_hdr.init(cc, HeaderKind::String, count);
sd->m_len = sl.len; // m_hash is computed soon.
data[sl.len] = 0;
auto const mcret = memcpy(data, sl.ptr, sl.len);
auto const ret = reinterpret_cast<StringData*>(mcret) - 1;
// Recalculating ret from mcret avoids a spill.
ret->preCompute(); // get m_hash right
assert(ret == sd);
assert(ret->isFlat());
assert(trueStatic ? ret->isStatic() : ret->isUncounted());
assert(ret->checkSane());
return ret;
}
开发者ID:huamichaelchen,项目名称:hhvm,代码行数:34,代码来源:string-data.cpp
示例5: assert
StringData* StringData::append(StringSlice range) {
assert(!hasMultipleRefs());
auto s = range.ptr;
auto const len = range.len;
if (len == 0) return this;
auto const newLen = size_t(m_len) + size_t(len);
if (UNLIKELY(newLen > MaxSize)) {
throw_string_too_large(newLen);
}
/*
* We may have an aliasing append. We don't allow appending with an
* interior pointer, although we may be asked to append less than
* the whole string in an aliasing situation.
*/
ALIASING_APPEND_ASSERT(s, len);
auto const requestLen = static_cast<uint32_t>(newLen);
auto const target = UNLIKELY(isShared()) ? escalate(requestLen)
: reserve(requestLen);
memcpy(target->mutableData() + m_len, s, len);
target->setSize(newLen);
assert(target->checkSane());
return target;
}
开发者ID:huamichaelchen,项目名称:hhvm,代码行数:28,代码来源:string-data.cpp
示例6: always_assert
NEVER_INLINE
StringData* StringData::MakeProxySlowPath(const APCString* apcstr) {
#ifdef NO_M_DATA
always_assert(false);
not_reached();
#else
auto const sd = static_cast<StringData*>(
MM().mallocSmallSize(sizeof(StringData) + sizeof(Proxy))
);
auto const data = apcstr->getStringData();
sd->m_data = const_cast<char*>(data->m_data);
sd->m_hdr.init(data->m_hdr, 1);
sd->m_lenAndHash = data->m_lenAndHash;
sd->proxy()->apcstr = apcstr;
sd->enlist();
apcstr->reference();
assert(sd->m_len == data->size());
assert(sd->m_hdr.aux == data->m_hdr.aux);
assert(sd->m_hdr.kind == HeaderKind::String);
assert(sd->hasExactlyOneRef());
assert(sd->m_hash == data->m_hash);
assert(sd->isProxy());
assert(sd->checkSane());
return sd;
#endif
}
开发者ID:gdbentley,项目名称:hhvm,代码行数:27,代码来源:string-data.cpp
示例7: format
HOT_FUNC
void StringData::releaseData() {
Format f = format();
if (f == IsSmall) return;
if (f == IsMalloc) {
ASSERT(checkSane());
free(m_data);
m_data = NULL;
return;
}
if (f == IsShared) {
ASSERT(checkSane());
m_big.shared->decRef();
return;
}
// Nothing to do for literals, which are rarely destructed anyway.
}
开发者ID:RepmujNetsik,项目名称:hiphop-php,代码行数:17,代码来源:string_data.cpp
示例8: assert
NEVER_INLINE
void StringData::releaseDataSlowPath() {
assert(isProxy());
assert(checkSane());
proxy()->apcstr->getHandle()->unreference();
delist();
MM().freeSmallSize(this, sizeof(StringData) + sizeof(Proxy));
}
开发者ID:AeroEng43,项目名称:hhvm,代码行数:8,代码来源:string-data.cpp
示例9: allocFlatForLenSmall
StringData* StringData::Make(size_t reserveLen) {
auto const sd = allocFlatForLenSmall(reserveLen);
sd->setSize(0);
assert(sd->hasExactlyOneRef());
assert(sd->isFlat());
assert(sd->checkSane());
return sd;
}
开发者ID:huamichaelchen,项目名称:hhvm,代码行数:9,代码来源:string-data.cpp
示例10: ASSERT
void StringData::escalate() {
ASSERT(isImmutable() && !isStatic() && size() > 0);
StringSlice s = slice();
char *buf = (char*)malloc(s.len + 1);
memcpy(buf, s.ptr, s.len);
buf[s.len] = 0;
m_len = s.len;
m_data = buf;
m_big.cap = s.len | IsMalloc;
// clear precomputed hashcode
m_hash = 0;
ASSERT(checkSane());
}
开发者ID:RepmujNetsik,项目名称:hiphop-php,代码行数:13,代码来源:string_data.cpp
示例11: assert
HOT_FUNC
void StringData::releaseDataSlowPath() {
assert(!isSmall());
assert(checkSane());
auto const loadedMode = mode();
if (LIKELY(loadedMode == Mode::Smart)) {
smart_free(m_data);
return;
}
if (loadedMode == Mode::Shared) {
assert(checkSane());
m_big.shared->decRef();
delist();
return;
}
assert(loadedMode == Mode::Malloc);
assert(checkSane());
free(m_data);
}
开发者ID:bnovoa,项目名称:hiphop-php,代码行数:23,代码来源:string-data.cpp
示例12: InvalidArgumentException
void StringData::initAttachDeprecated(const char* data, int len) {
if (uint32_t(len) > MaxSize) {
throw InvalidArgumentException("len>=2^30", len);
}
// Don't copy small strings here either because the caller sometimes
// assumes he can mess with data while this string is still alive,
// and we want to free it eagerly. Sketchy!
m_hash = 0;
_count = 0;
m_len = len;
m_cdata = data;
m_big.cap = len | IsMalloc;
ASSERT(checkSane());
TAINT_OBSERVER_REGISTER_MUTATED(m_taint_data, rawdata());
}
开发者ID:RepmujNetsik,项目名称:hiphop-php,代码行数:15,代码来源:string_data.cpp
示例13: allocFlatForLenSmall
StringData* StringData::Make(folly::StringPiece r1, folly::StringPiece r2) {
auto const len = r1.size() + r2.size();
auto const sd = allocFlatForLenSmall(len);
sd->m_lenAndHash = len; // hash=0
auto const data = reinterpret_cast<char*>(sd + 1);
memcpy(data, r1.data(), r1.size());
memcpy(data + r1.size(), r2.data(), r2.size());
data[len] = 0;
assert(sd->hasExactlyOneRef());
assert(sd->isFlat());
assert(sd->checkSane());
return sd;
}
开发者ID:AeroEng43,项目名称:hhvm,代码行数:15,代码来源:string-data.cpp
示例14: allocFlatForLen
StringData* StringData::Make(size_t reserveLen) {
auto const allocRet = allocFlatForLen(reserveLen);
auto const sd = allocRet.first;
auto const capCode = allocRet.second;
auto const data = reinterpret_cast<char*>(sd + 1);
data[0] = 0;
sd->m_data = data;
sd->m_capAndCount = HeaderKind::String << 24 | capCode; // count=0
sd->m_lenAndHash = 0; // len=hash=0
assert(sd->isFlat());
assert(sd->checkSane());
return sd;
}
开发者ID:Dream-Seeker,项目名称:hhvm,代码行数:15,代码来源:string-data.cpp
示例15: allocFlatForLen
StringData* StringData::Make(size_t reserveLen) {
auto const allocRet = allocFlatForLen(reserveLen);
auto const sd = allocRet.first;
auto const cc = allocRet.second;
auto const data = reinterpret_cast<char*>(sd + 1);
data[0] = 0;
sd->m_data = data;
sd->m_hdr.init(cc, HeaderKind::String, 1);
sd->m_lenAndHash = 0; // len=hash=0
assert(sd->hasExactlyOneRef());
assert(sd->isFlat());
assert(sd->checkSane());
return sd;
}
开发者ID:stevedien,项目名称:hhvm,代码行数:16,代码来源:string-data.cpp
示例16: assert
// State transition from Mode::Shared to Mode::Flat.
StringData* StringData::escalate(size_t cap) {
assert(isShared() && !isStatic() && cap >= m_len);
auto const sd = Make(cap);
auto const src = slice();
auto const dst = sd->mutableData();
sd->setSize(src.len);
auto const mcret = memcpy(dst, src.ptr, src.len);
auto const ret = static_cast<StringData*>(mcret) - 1;
// Recalculating ret from mcret avoids a spill.
assert(ret == sd);
assert(ret->checkSane());
return ret;
}
开发者ID:Dream-Seeker,项目名称:hhvm,代码行数:17,代码来源:string-data.cpp
注:本文中的checkSane函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论