Ejemplo n.º 1
0
char *APCFileStorage::put(const char *data, int32_t len) {
  Lock lock(m_lock);
  if (m_state != StorageState::Open ||
      len + PaddingSize > m_chunkSize - PaddingSize) {
    return nullptr;
  }
  if (len + PaddingSize > m_chunkRemain && !addFile()) {
    m_state = StorageState::Full;
    return nullptr;
  }
  assert(m_current);
  assert(len + PaddingSize <= m_chunkRemain);
  strhash_t h = hash_string_unsafe(data, len);
  *(strhash_t*)m_current = h;
  m_current += sizeof(h);
  *(int32_t*)m_current = len;
  m_current += sizeof(len);
  // should be no overlap
  memcpy(m_current, data, len);
  char *addr = m_current;
  addr[len] = '\0';
  m_current += len + sizeof(char);
  *(strhash_t*)m_current = TombHash;
  m_chunkRemain -= len + PaddingSize;
  return addr;
}
Ejemplo n.º 2
0
void StringData::preCompute() {
  StringSlice s = slice();
  m_hash = hash_string_unsafe(s.ptr, s.len);
  assert(m_hash >= 0);
  if (s.len > 0 &&
      (is_numeric_string(s.ptr, s.len, nullptr, nullptr,
                         1, nullptr) == KindOfNull)) {
    m_hash |= STRHASH_MSB;
  }
}
Ejemplo n.º 3
0
void StringData::preCompute() {
  auto s = slice();
  m_hash = hash_string_unsafe(s.data(), s.size());
  assert(m_hash >= 0);
  if (s.size() > 0 &&
      (is_numeric_string(s.data(), s.size(), nullptr, nullptr,
                         1, nullptr) == KindOfNull)) {
    m_hash |= STRHASH_MSB;
  }
}
Ejemplo n.º 4
0
 size_t operator()(const String& s) const {
   return hash_string_unsafe(s.data(), s.size());
 }