//////////////////////////////////////////////////////////////////////////////// /// DISCLAIMER /// /// Copyright 2014-2016 ArangoDB GmbH, Cologne, Germany /// Copyright 2004-2014 triAGENS GmbH, Cologne, Germany /// /// Licensed under the Apache License, Version 2.0 (the "License"); /// you may not use this file except in compliance with the License. /// You may obtain a copy of the License at /// /// http://www.apache.org/licenses/LICENSE-2.0 /// /// Unless required by applicable law or agreed to in writing, software /// distributed under the License is distributed on an "AS IS" BASIS, /// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. /// See the License for the specific language governing permissions and /// limitations under the License. /// /// Copyright holder is ArangoDB GmbH, Cologne, Germany /// /// @author Jan Steemann //////////////////////////////////////////////////////////////////////////////// #ifndef ARANGOD_TRANSACTION_HINTS_H #define ARANGOD_TRANSACTION_HINTS_H 1 #include "Basics/Common.h" namespace arangodb { namespace transaction { class Hints { public: typedef uint32_t ValueType; /// @brief individual hint flags that can be used for transactions enum class Hint : ValueType { NONE = 0, SINGLE_OPERATION = 1, LOCK_ENTIRELY = 2, LOCK_NEVER = 4, NO_BEGIN_MARKER = 8, // not supported in RocksDB NO_ABORT_MARKER = 16, // not supported in RocksDB NO_THROTTLING = 32, // not supported in RocksDB TRY_LOCK = 64, NO_COMPACTION_LOCK = 128, // not supported in RocksDB NO_USAGE_LOCK = 256, // not supported in RocksDB RECOVERY = 512, NO_DLD = 1024, // disable deadlock detection, unsupported in RocksDB NO_INDEXING = 2048, // use DisableIndexing for RocksDB INTERMEDIATE_COMMITS = 4096, // enable intermediate commits in rocksdb ALLOW_RANGE_DELETE = 8192, // enable range-delete in rocksdb FROM_TOPLEVEL_AQL = 16384, // transaction is only runnning one AQL query GLOBAL_MANAGED = 32768, // transaction with externally managed lifetime INDEX_CREATION = 65536, // transaction is for creating index on existing collection (many inserts, no removes, index will be deleted on any failure anyway) }; Hints() : _value(0) {} explicit Hints(Hint value) : _value(static_cast(value)) {} explicit Hints(ValueType value) : _value(value) {} inline bool has(ValueType value) const noexcept { return (_value & value) != 0; } inline bool has(Hint value) const noexcept { return has(static_cast(value)); } inline void set(ValueType value) { _value |= value; } inline void set(Hint value) { set(static_cast(value)); } inline void unset(ValueType value) { _value &= ~value; } inline void unset(Hint value) { unset(static_cast(value)); } inline ValueType toInt() const { return static_cast(_value); } private: ValueType _value; }; } // namespace transaction } // namespace arangodb #endif