Seastar
High performance C++ framework for concurrent servers
enum.hh
1/*
2 * This file is open source software, licensed to you under the terms
3 * of the Apache License, Version 2.0 (the "License"). See the NOTICE file
4 * distributed with this work for additional information regarding copyright
5 * ownership. You may not use this file except in compliance with the License.
6 *
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing,
12 * software distributed under the License is distributed on an
13 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14 * KIND, either express or implied. See the License for the
15 * specific language governing permissions and limitations
16 * under the License.
17 */
18/*
19 * Copyright (C) 2015 Cloudius Systems, Ltd.
20 */
21
22#pragma once
23
24/*
25 * This header file defines a hash function for enum types, using the
26 * standard hash function of the underlying type (such as int). This makes
27 * it possible to inherit from this type to
28 */
29
30#ifndef SEASTAR_MODULE
31#include <type_traits>
32#include <functional>
33#include <cstddef>
34#include <seastar/util/modules.hh>
35#endif
36
37namespace seastar {
38
39SEASTAR_MODULE_EXPORT
40template <typename T>
41class enum_hash {
42 static_assert(std::is_enum_v<T>, "must be an enum");
43public:
44 std::size_t operator()(const T& e) const {
45 using utype = std::underlying_type_t<T>;
46 return std::hash<utype>()(static_cast<utype>(e));
47 }
48};
49
50}
Definition: enum.hh:41
Seastar API namespace.
Definition: abort_on_ebadf.hh:26