-
Notifications
You must be signed in to change notification settings - Fork 95
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #3 from kadena-io/gain-all-ffi
Gain all ffi
- Loading branch information
Showing
876 changed files
with
305,549 additions
and
421 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,132 @@ | ||
// Copyright (c) 2011-present, Facebook, Inc. All rights reserved. | ||
// This source code is licensed under both the GPLv2 (found in the | ||
// COPYING file in the root directory) and Apache 2.0 License | ||
// (found in the LICENSE.Apache file in the root directory). | ||
// | ||
// Copyright (c) 2011 The LevelDB Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. See the AUTHORS file for names of contributors. | ||
|
||
// The code not taken from the LevelDB and RocksDB authors is | ||
// Copyright (c) 2022 Kadena. | ||
|
||
// copied from rocksdb/c.cc | ||
#include <stdlib.h> | ||
#include "rocksdb/db.h" | ||
#include "rocksdb/slice_transform.h" | ||
|
||
#include <vector> | ||
#include <unordered_set> | ||
#include <map> | ||
|
||
using rocksdb::DB; | ||
using rocksdb::DBOptions; | ||
using rocksdb::DbPath; | ||
using rocksdb::Env; | ||
using rocksdb::EnvOptions; | ||
using rocksdb::Options; | ||
using rocksdb::ReadOptions; | ||
using rocksdb::Slice; | ||
using rocksdb::SliceParts; | ||
using rocksdb::SliceTransform; | ||
using rocksdb::Snapshot; | ||
using rocksdb::SstFileWriter; | ||
using rocksdb::Status; | ||
using rocksdb::WritableFile; | ||
using rocksdb::WriteOptions; | ||
|
||
using std::shared_ptr; | ||
using std::vector; | ||
using std::unordered_set; | ||
using std::map; | ||
|
||
class DelimitedPrefixTransform : public SliceTransform { | ||
protected: | ||
std::vector<char> *delims; | ||
public: | ||
|
||
explicit DelimitedPrefixTransform(std::vector<char> *_delims) : delims(_delims) { } | ||
~DelimitedPrefixTransform() { | ||
} | ||
|
||
static const char* kClassName() { return "rocksdb-haskell.DelimitedPrefix"; } | ||
static const char* kNickName() { return "table"; } | ||
const char* Name() const override { return kClassName(); } | ||
Slice Transform(const Slice& src) const override { | ||
size_t prefix_end; | ||
for (char c : *delims) { | ||
if ((prefix_end = std::string(src.data()).find(c)) != std::string::npos) { | ||
return Slice(src.data(), prefix_end); | ||
} | ||
} | ||
// we must return the entire string if there's no symbol because of the law: | ||
// prefix(prefix(str)) == prefix(str) | ||
// this prevents us from implementing a real InDomain, which will go badly | ||
// (redundant prefix seeking) | ||
// *if* we mix prefixed and nonprefixed keys in the same database | ||
return src; | ||
} | ||
|
||
bool InDomain(const Slice&) const override { | ||
return true; | ||
} | ||
|
||
bool InRange(const Slice&) const override { | ||
return true; | ||
} | ||
|
||
bool FullLengthEnabled(size_t*) const override { | ||
return false; | ||
} | ||
|
||
bool SameResultWhenAppended(const Slice&) const override { | ||
return false; | ||
} | ||
}; | ||
|
||
std::vector<char> std_delimiters { '$', '%' }; | ||
|
||
DelimitedPrefixTransform dollar_percent_delimited_transform(&std_delimiters); | ||
|
||
extern "C" { | ||
|
||
struct rocksdb_t { DB* rep; }; | ||
struct rocksdb_options_t { Options rep; }; | ||
struct rocksdb_writeoptions_t { WriteOptions rep; }; | ||
struct rocksdb_readoptions_t { ReadOptions rep; }; | ||
|
||
static bool SaveError(char** errptr, const Status& s) { | ||
assert(errptr != nullptr); | ||
if (s.ok()) { | ||
return false; | ||
} else if (*errptr == nullptr) { | ||
*errptr = strdup(s.ToString().c_str()); | ||
} else { | ||
// TODO(sanjay): Merge with existing error? | ||
// This is a bug if *errptr is not created by malloc() | ||
free(*errptr); | ||
*errptr = strdup(s.ToString().c_str()); | ||
} | ||
return true; | ||
} | ||
// end of code copied from rocksdb/c.cc | ||
|
||
void rocksdb_delete_range(rocksdb_t* db, | ||
const rocksdb_writeoptions_t* options, | ||
const char* start_key, size_t start_key_len, | ||
const char* end_key, size_t end_key_len, | ||
char** errptr) { | ||
SaveError(errptr, db->rep->DeleteRange(options->rep, nullptr, | ||
Slice(start_key, start_key_len), | ||
Slice(end_key, end_key_len))); | ||
} | ||
|
||
void rocksdb_readoptions_set_auto_prefix_mode(rocksdb_readoptions_t* options, bool auto_prefix_mode) { | ||
options->rep.auto_prefix_mode = auto_prefix_mode; | ||
} | ||
|
||
const void* rocksdb_options_table_prefix_extractor() { | ||
return &dollar_percent_delimited_transform; | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
#pragma once | ||
|
||
#include "rocksdb/c.h" | ||
|
||
extern ROCKSDB_LIBRARY_API void rocksdb_delete_range(rocksdb_t* db, | ||
const rocksdb_writeoptions_t* options, | ||
const char* start_key, size_t start_key_len, | ||
const char* end_key, size_t end_key_len, | ||
char** errptr); | ||
|
||
extern ROCKSDB_LIBRARY_API void rocksdb_readoptions_set_auto_prefix_mode( | ||
rocksdb_readoptions_t* options, int auto_prefix_mode); | ||
|
||
extern ROCKSDB_LIBRARY_API void* rocksdb_options_table_prefix_extractor( | ||
char *delims, int delimsLen); |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
// Copyright (c) 2011-present, Facebook, Inc. All rights reserved. | ||
// This source code is licensed under both the GPLv2 (found in the | ||
// COPYING file in the root directory) and Apache 2.0 License | ||
// (found in the LICENSE.Apache file in the root directory). | ||
// | ||
// Copyright (c) 2011 The LevelDB Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. See the AUTHORS file for names of contributors. | ||
|
||
#include "rocksdb/cache.h" | ||
|
||
#include "cache/lru_cache.h" | ||
#include "rocksdb/secondary_cache.h" | ||
#include "rocksdb/utilities/customizable_util.h" | ||
#include "rocksdb/utilities/options_type.h" | ||
#include "util/string_util.h" | ||
|
||
namespace ROCKSDB_NAMESPACE { | ||
#ifndef ROCKSDB_LITE | ||
static std::unordered_map<std::string, OptionTypeInfo> | ||
lru_cache_options_type_info = { | ||
{"capacity", | ||
{offsetof(struct LRUCacheOptions, capacity), OptionType::kSizeT, | ||
OptionVerificationType::kNormal, OptionTypeFlags::kMutable}}, | ||
{"num_shard_bits", | ||
{offsetof(struct LRUCacheOptions, num_shard_bits), OptionType::kInt, | ||
OptionVerificationType::kNormal, OptionTypeFlags::kMutable}}, | ||
{"strict_capacity_limit", | ||
{offsetof(struct LRUCacheOptions, strict_capacity_limit), | ||
OptionType::kBoolean, OptionVerificationType::kNormal, | ||
OptionTypeFlags::kMutable}}, | ||
{"high_pri_pool_ratio", | ||
{offsetof(struct LRUCacheOptions, high_pri_pool_ratio), | ||
OptionType::kDouble, OptionVerificationType::kNormal, | ||
OptionTypeFlags::kMutable}}, | ||
}; | ||
#endif // ROCKSDB_LITE | ||
|
||
Status SecondaryCache::CreateFromString( | ||
const ConfigOptions& config_options, const std::string& value, | ||
std::shared_ptr<SecondaryCache>* result) { | ||
return LoadSharedObject<SecondaryCache>(config_options, value, nullptr, | ||
result); | ||
} | ||
|
||
Status Cache::CreateFromString(const ConfigOptions& config_options, | ||
const std::string& value, | ||
std::shared_ptr<Cache>* result) { | ||
Status status; | ||
std::shared_ptr<Cache> cache; | ||
if (value.find('=') == std::string::npos) { | ||
cache = NewLRUCache(ParseSizeT(value)); | ||
} else { | ||
#ifndef ROCKSDB_LITE | ||
LRUCacheOptions cache_opts; | ||
status = OptionTypeInfo::ParseStruct(config_options, "", | ||
&lru_cache_options_type_info, "", | ||
value, &cache_opts); | ||
if (status.ok()) { | ||
cache = NewLRUCache(cache_opts); | ||
} | ||
#else | ||
(void)config_options; | ||
status = Status::NotSupported("Cannot load cache in LITE mode ", value); | ||
#endif //! ROCKSDB_LITE | ||
} | ||
if (status.ok()) { | ||
result->swap(cache); | ||
} | ||
return status; | ||
} | ||
} // namespace ROCKSDB_NAMESPACE |
Oops, something went wrong.