123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- #ifndef BASE_TASK_TASK_TRAITS_EXTENSION_H_
- #define BASE_TASK_TASK_TRAITS_EXTENSION_H_
- #include <stdint.h>
- #include <array>
- #include <tuple>
- #include <utility>
- #include "base/base_export.h"
- #include "base/traits_bag.h"
- namespace base {
- struct BASE_EXPORT TaskTraitsExtensionStorage {
-
-
- static constexpr size_t kStorageSize = 8;
- inline constexpr TaskTraitsExtensionStorage();
- inline constexpr TaskTraitsExtensionStorage(
- uint8_t extension_id_in,
- const std::array<uint8_t, kStorageSize>& data_in);
- inline constexpr TaskTraitsExtensionStorage(
- uint8_t extension_id_in,
- std::array<uint8_t, kStorageSize>&& data_in);
- inline constexpr TaskTraitsExtensionStorage(
- const TaskTraitsExtensionStorage& other);
- inline TaskTraitsExtensionStorage& operator=(
- const TaskTraitsExtensionStorage& other) = default;
- inline bool operator==(const TaskTraitsExtensionStorage& other) const;
- enum ExtensionId : uint8_t {
-
- kInvalidExtensionId = 0,
-
- kFirstEmbedderExtensionId = 1,
-
-
-
- kMaxExtensionId = 4
- };
-
- uint8_t extension_id;
-
- std::array<uint8_t, kStorageSize> data;
- };
- inline constexpr TaskTraitsExtensionStorage::TaskTraitsExtensionStorage()
- : extension_id(kInvalidExtensionId), data{} {}
- inline constexpr TaskTraitsExtensionStorage::TaskTraitsExtensionStorage(
- uint8_t extension_id_in,
- const std::array<uint8_t, kStorageSize>& data_in)
- : extension_id(extension_id_in), data(data_in) {}
- inline constexpr TaskTraitsExtensionStorage::TaskTraitsExtensionStorage(
- uint8_t extension_id_in,
- std::array<uint8_t, kStorageSize>&& data_in)
- : extension_id(extension_id_in), data(std::move(data_in)) {}
- inline constexpr TaskTraitsExtensionStorage::TaskTraitsExtensionStorage(
- const TaskTraitsExtensionStorage& other) = default;
- namespace trait_helpers {
- struct TaskTraitsExtension {
- template <class... ArgTypes,
- class CheckCanMakeExtension =
- decltype(MakeTaskTraitsExtension(std::declval<ArgTypes>()...))>
- constexpr TaskTraitsExtension(ArgTypes... args) {}
- };
- template <class... ArgTypes>
- using AreValidTraitsForExtension =
- std::is_constructible<TaskTraitsExtension, ArgTypes...>;
- template <class... ArgTypes>
- constexpr TaskTraitsExtensionStorage GetTaskTraitsExtension(
- std::true_type base_traits,
- ArgTypes... args) {
- return TaskTraitsExtensionStorage();
- }
- template <class... ArgTypes>
- constexpr TaskTraitsExtensionStorage GetTaskTraitsExtension(
- std::false_type base_traits,
- ArgTypes... args) {
- return MakeTaskTraitsExtension(args...);
- }
- }
- inline bool TaskTraitsExtensionStorage::operator==(
- const TaskTraitsExtensionStorage& other) const {
- static_assert(
- 9 == sizeof(TaskTraitsExtensionStorage),
- "Update comparison operator when TaskTraitsExtensionStorage changes");
- return extension_id == other.extension_id && data == other.data;
- }
- }
- #endif
|