upper_lower.h
Go to the documentation of this file.
1 //
2 // Bareflank Hypervisor
3 //
4 // Copyright (C) 2015 Assured Information Security, Inc.
5 // Author: Rian Quinn <quinnr@ainfosec.com>
6 // Author: Brendan Kerrigan <kerriganb@ainfosec.com>
7 //
8 // This library is free software; you can redistribute it and/or
9 // modify it under the terms of the GNU Lesser General Public
10 // License as published by the Free Software Foundation; either
11 // version 2.1 of the License, or (at your option) any later version.
12 //
13 // This library is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 // Lesser General Public License for more details.
17 //
18 // You should have received a copy of the GNU Lesser General Public
19 // License along with this library; if not, write to the Free Software
20 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 
22 #ifndef UPPER_LOWER_H
23 #define UPPER_LOWER_H
24 
25 #include <stdint.h>
26 
27 namespace bfn
28 {
29 
35 template <class T>
36 auto lower(T ptr) noexcept
37 { return reinterpret_cast<uintptr_t>(ptr) & (0xFFFUL); }
38 
45 template <class T>
46 auto lower(T ptr, uintptr_t from) noexcept
47 { return reinterpret_cast<uintptr_t>(ptr) & ((0x1UL << from) - 1); }
48 
54 template <class T>
55 auto upper(T ptr) noexcept
56 { return reinterpret_cast<uintptr_t>(ptr) & ~(0xFFFUL); }
57 
64 template <class T>
65 auto upper(T ptr, uintptr_t from) noexcept
66 { return reinterpret_cast<uintptr_t>(ptr) & ~((0x1UL << from) - 1); }
67 
68 }
69 
70 #endif
auto upper(T ptr) noexcept
Definition: upper_lower.h:55
void uint64_t uint64_t uint64_t *rdx noexcept
constexpr const auto from
Definition: cpuid_x64.h:86
auto lower(T ptr) noexcept
Definition: upper_lower.h:36