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 
37 namespace seastar {
38 
39 SEASTAR_MODULE_EXPORT
40 template <typename T>
41 class enum_hash {
42  static_assert(std::is_enum_v<T>, "must be an enum");
43 public:
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