OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
44 | 44 |
45 // According to ISO C standard ISO/IEC 9899, section 6.2.6.2 (2), the three | 45 // According to ISO C standard ISO/IEC 9899, section 6.2.6.2 (2), the three |
46 // representations of signed integers allowed are two's complement, one's | 46 // representations of signed integers allowed are two's complement, one's |
47 // complement and sign/magnitude. We can detect which is used by looking at | 47 // complement and sign/magnitude. We can detect which is used by looking at |
48 // the two last bits of -1, which will be 11 in two's complement, 10 in one's | 48 // the two last bits of -1, which will be 11 in two's complement, 10 in one's |
49 // complement and 01 in sign/magnitude. | 49 // complement and 01 in sign/magnitude. |
50 // TODO(sprang): In the unlikely event that we actually need to support a | 50 // TODO(sprang): In the unlikely event that we actually need to support a |
51 // platform that doesn't use two's complement, implement conversion to/from | 51 // platform that doesn't use two's complement, implement conversion to/from |
52 // wire format. | 52 // wire format. |
53 | 53 |
54 namespace { | 54 // Assume the if any one signed integer type is two's complement, then all |
55 inline void AssertTwosComplement() { | 55 // other will be too. |
56 // Assume the if any one signed integer type is two's complement, then all | 56 static_assert( |
57 // other will be too. | 57 (-1 & 0x03) == 0x03, |
58 static_assert( | 58 "Only two's complement representation of signed integers supported."); |
59 (-1 & 0x03) == 0x03, | 59 |
60 "Only two's complement representation of signed integers supported."); | |
61 } | |
62 // Plain const char* won't work for static_assert, use #define instead. | 60 // Plain const char* won't work for static_assert, use #define instead. |
63 #define kSizeErrorMsg "Byte size must be less than or equal to data type size." | 61 #define kSizeErrorMsg "Byte size must be less than or equal to data type size." |
64 } | |
65 | 62 |
66 // Utility class for getting the unsigned equivalent of a signed type. | 63 // Utility class for getting the unsigned equivalent of a signed type. |
67 template <typename T> | 64 template <typename T> |
68 struct UnsignedOf; | 65 struct UnsignedOf; |
69 | 66 |
70 // Class for reading integers from a sequence of bytes. | 67 // Class for reading integers from a sequence of bytes. |
71 // T = type of integer, B = bytes to read, is_signed = true if signed integer. | 68 // T = type of integer, B = bytes to read, is_signed = true if signed integer. |
72 // If is_signed is true and B < sizeof(T), sign extension might be needed. | 69 // If is_signed is true and B < sizeof(T), sign extension might be needed. |
73 template <typename T, | 70 template <typename T, |
74 unsigned int B = sizeof(T), | 71 unsigned int B = sizeof(T), |
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
395 data[4] = val >> 32; | 392 data[4] = val >> 32; |
396 data[5] = val >> 40; | 393 data[5] = val >> 40; |
397 data[6] = val >> 48; | 394 data[6] = val >> 48; |
398 data[7] = val >> 56; | 395 data[7] = val >> 56; |
399 } | 396 } |
400 }; | 397 }; |
401 | 398 |
402 } // namespace webrtc | 399 } // namespace webrtc |
403 | 400 |
404 #endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_BYTE_IO_H_ | 401 #endif // WEBRTC_MODULES_RTP_RTCP_SOURCE_BYTE_IO_H_ |
OLD | NEW |