GCC Code Coverage Report


Directory: ./
File: src/dtypes.h
Date: 2023-04-27 00:55:30
Exec Total Coverage
Lines: 1 1 100.0%
Functions: 1 1 100.0%
Branches: 0 0 -%

Line Branch Exec Source
1 #ifndef LYTHON_TYPES_HEADER
2 #define LYTHON_TYPES_HEADER
3
4 #include <functional>
5 #include <list>
6 #include <string>
7 #include <string_view>
8 #include <unordered_map>
9 #include <unordered_set>
10 #include <vector>
11
12 #include <sstream>
13
14 #include "dependencies/xx_hash.h"
15 #include "utilities/allocator.h"
16
17 #ifdef __linux__
18 # define KIWI_INLINE __attribute__((always_inline))
19 #else
20 # define KIWI_INLINE __forceinline
21 #endif
22
23 // ---------------
24 namespace lython {
25
26 using uint64 = std::uint64_t;
27 using int64 = std::int64_t;
28
29 using uint32 = std::uint32_t;
30 using int32 = std::int32_t;
31
32 using uint16 = std::uint16_t;
33 using int16 = std::int16_t;
34
35 using uint8 = std::uint8_t;
36 using int8 = std::int8_t;
37
38 // using float8 = ;
39 // using float16 = ;
40 // using float24 = ;
41 using float32 = float;
42 using float64 = double;
43
44 // using bfloat16 = ;
45 // using float40 = ;
46 // using float80 = ;
47 // using float128 = ;
48 // using float256 = ;
49
50 using uchar = unsigned char;
51
52 template <typename V>
53 using AllocatorCPU = Allocator<V, device::CPU>;
54
55 template <typename V>
56 using Array = std::vector<V, AllocatorCPU<V>>;
57
58 template <typename V>
59 using List = std::list<V, AllocatorCPU<V>>;
60
61 using String = std::basic_string<char, std::char_traits<char>, AllocatorCPU<char>>;
62
63 using StringStream = std::basic_stringstream<char, std::char_traits<char>, AllocatorCPU<char>>;
64
65 using StringView = std::string_view;
66 } // namespace lython
67
68 // ------------
69 namespace std {
70
71 // FIXME: BUILD_WEBASSEMBLY use clang by default so this is the same check
72 #if !BUILD_WEBASSEMBLY
73 template <>
74 struct hash<lython::String> {
75 using Key = lython::String;
76
77 std::size_t operator()(Key const& k) const noexcept {
78 1385 return lython::xx_hash_3((void*)k.data(), k.length());
79 // #ifdef __linux__
80 // return std::_Hash_impl::hash(k.data(), k.length() * sizeof(Char));
81 // #else
82 // return std::_Hash_array_representation(k.c_str(), k.size());
83 // #endif
84 }
85 };
86 #endif
87 //*/
88
89 } // namespace std
90
91 // ---------------
92 namespace lython {
93
94 template <class _Ty, class _Dx = std::default_delete<_Ty>>
95 using Unique = std::unique_ptr<_Ty, _Dx>;
96
97 template <class _Ty>
98 using Shared = std::shared_ptr<_Ty>;
99
100 template <typename... Args>
101 using Tuple = std::tuple<Args...>;
102
103 template <typename A, typename B>
104 using Pair = std::pair<A, B>;
105
106 template <typename K, typename V, typename H = std::hash<K>>
107 using Dict = std::unordered_map<K, V, H, std::equal_to<K>, AllocatorCPU<std::pair<K const, V>>>;
108
109 template <typename V>
110 using Set = std::unordered_set<V, std::hash<V>, std::equal_to<V>, AllocatorCPU<V>>;
111
112 class LythonException: public std::exception {};
113
114 } // namespace lython
115
116 #endif
117