OLD | NEW |
---|---|
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #ifndef PLATFORM_UTILS_H_ | 5 #ifndef PLATFORM_UTILS_H_ |
6 #define PLATFORM_UTILS_H_ | 6 #define PLATFORM_UTILS_H_ |
7 | 7 |
8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
9 #include "platform/globals.h" | 9 #include "platform/globals.h" |
10 | 10 |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
79 static uint32_t RoundUpToPowerOfTwo(uint32_t x); | 79 static uint32_t RoundUpToPowerOfTwo(uint32_t x); |
80 static int CountOneBits(uint32_t x); | 80 static int CountOneBits(uint32_t x); |
81 | 81 |
82 // Computes a hash value for the given string. | 82 // Computes a hash value for the given string. |
83 static uint32_t StringHash(const char* data, int length); | 83 static uint32_t StringHash(const char* data, int length); |
84 | 84 |
85 // Computes a hash value for the given word. | 85 // Computes a hash value for the given word. |
86 static uint32_t WordHash(word key); | 86 static uint32_t WordHash(word key); |
87 | 87 |
88 // Check whether an N-bit two's-complement representation can hold value. | 88 // Check whether an N-bit two's-complement representation can hold value. |
89 static inline bool IsInt(int N, word value) { | 89 template<typename T> |
90 ASSERT((0 < N) && (N < kBitsPerWord)); | 90 static inline bool IsInt(int N, T value) { |
91 ASSERT((0 < N) && (N < (kBitsPerByte * sizeof(T)))); | |
Ivan Posva
2012/01/18 20:05:22
sizeof(value) is closer to the style guide: http:/
regis
2012/01/18 21:50:12
Done.
| |
91 word limit = static_cast<word>(1) << (N - 1); | 92 word limit = static_cast<word>(1) << (N - 1); |
Ivan Posva
2012/01/18 20:05:22
You need to cast the 1 to T instead of word here.
regis
2012/01/18 21:50:12
The cast is fixed in patch 5.
I have added a test.
| |
92 return (-limit <= value) && (value < limit); | 93 return (-limit <= value) && (value < limit); |
93 } | 94 } |
94 | 95 |
95 static inline bool IsUint(int N, word value) { | 96 template<typename T> |
Ivan Posva
2012/01/18 20:05:22
ditto
regis
2012/01/18 21:50:12
Done.
| |
96 ASSERT((0 < N) && (N < kBitsPerWord)); | 97 static inline bool IsUint(int N, T value) { |
98 ASSERT((0 < N) && (N < (kBitsPerByte * sizeof(T)))); | |
97 word limit = static_cast<word>(1) << N; | 99 word limit = static_cast<word>(1) << N; |
98 return (0 <= value) && (value < limit); | 100 return (0 <= value) && (value < limit); |
99 } | 101 } |
100 | 102 |
101 // Check whether the magnitude of value fits in N bits, i.e., whether an | 103 // Check whether the magnitude of value fits in N bits, i.e., whether an |
102 // (N+1)-bit sign-magnitude representation can hold value. | 104 // (N+1)-bit sign-magnitude representation can hold value. |
103 static inline bool IsAbsoluteUint(int N, word value) { | 105 template<typename T> |
Ivan Posva
2012/01/18 20:05:22
ditto
regis
2012/01/18 21:50:12
Done.
| |
104 ASSERT((0 < N) && (N < kBitsPerWord)); | 106 static inline bool IsAbsoluteUint(int N, T value) { |
107 ASSERT((0 < N) && (N < (kBitsPerByte * sizeof(T)))); | |
105 if (value < 0) value = -value; | 108 if (value < 0) value = -value; |
106 return IsUint(N, value); | 109 return IsUint(N, value); |
107 } | 110 } |
108 | 111 |
109 static inline int32_t Low16Bits(int32_t value) { | 112 static inline int32_t Low16Bits(int32_t value) { |
110 return static_cast<int32_t>(value & 0xffff); | 113 return static_cast<int32_t>(value & 0xffff); |
111 } | 114 } |
112 | 115 |
113 static inline int32_t High16Bits(int32_t value) { | 116 static inline int32_t High16Bits(int32_t value) { |
114 return static_cast<int32_t>(value >> 16); | 117 return static_cast<int32_t>(value >> 16); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
146 static char IntToHexDigit(int i) { | 149 static char IntToHexDigit(int i) { |
147 ASSERT(0 <= i && i < 16); | 150 ASSERT(0 <= i && i < 16); |
148 if (i < 10) return static_cast<char>('0' + i); | 151 if (i < 10) return static_cast<char>('0' + i); |
149 return static_cast<char>('A' + (i - 10)); | 152 return static_cast<char>('A' + (i - 10)); |
150 } | 153 } |
151 }; | 154 }; |
152 | 155 |
153 } // namespace dart | 156 } // namespace dart |
154 | 157 |
155 #endif // PLATFORM_UTILS_H_ | 158 #endif // PLATFORM_UTILS_H_ |
OLD | NEW |