OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright 2006 The Android Open Source Project | |
3 * | |
4 * Use of this source code is governed by a BSD-style license that can be | |
5 * found in the LICENSE file. | |
6 */ | |
7 | |
8 #ifndef SkUtils_DEFINED | |
9 #define SkUtils_DEFINED | |
10 | |
11 #include "SkTypes.h" | |
12 | |
13 /** Similar to memset(), but it assigns a 16bit value into the buffer. | |
14 @param buffer The memory to have value copied into it | |
15 @param value The 16bit value to be copied into buffer | |
16 @param count The number of times value should be copied into the buffer. | |
17 */ | |
18 static inline void sk_memset16(uint16_t buffer[], uint16_t value, int count) { | |
19 for (int i = 0; i < count; i++) { | |
20 buffer[i] = value; | |
21 } | |
22 } | |
23 | |
24 /** Similar to memset(), but it assigns a 32bit value into the buffer. | |
25 @param buffer The memory to have value copied into it | |
26 @param value The 32bit value to be copied into buffer | |
27 @param count The number of times value should be copied into the buffer. | |
28 */ | |
29 static inline void sk_memset32(uint32_t buffer[], uint32_t value, int count) { | |
30 for (int i = 0; i < count; i++) { | |
31 buffer[i] = value; | |
32 } | |
33 } | |
34 | |
35 /////////////////////////////////////////////////////////////////////////////// | |
36 | |
37 #define kMaxBytesInUTF8Sequence 4 | |
38 | |
39 #ifdef SK_DEBUG | |
40 int SkUTF8_LeadByteToCount(unsigned c); | |
41 #else | |
42 #define SkUTF8_LeadByteToCount(c) ((((0xE5 << 24) >> ((unsigned)c >> 4 <<
1)) & 3) + 1) | |
43 #endif | |
44 | |
45 inline int SkUTF8_CountUTF8Bytes(const char utf8[]) { | |
46 SkASSERT(utf8); | |
47 return SkUTF8_LeadByteToCount(*(const uint8_t*)utf8); | |
48 } | |
49 | |
50 int SkUTF8_CountUnichars(const char utf8[]); | |
51 int SkUTF8_CountUnichars(const char utf8[], size_t byteLength); | |
52 SkUnichar SkUTF8_ToUnichar(const char utf8[]); | |
53 SkUnichar SkUTF8_NextUnichar(const char**); | |
54 SkUnichar SkUTF8_PrevUnichar(const char**); | |
55 | |
56 /** Return the number of bytes need to convert a unichar | |
57 into a utf8 sequence. Will be 1..kMaxBytesInUTF8Sequence, | |
58 or 0 if uni is illegal. | |
59 */ | |
60 size_t SkUTF8_FromUnichar(SkUnichar uni, char utf8[] = NULL); | |
61 | |
62 /////////////////////////////////////////////////////////////////////////////// | |
63 | |
64 #define SkUTF16_IsHighSurrogate(c) (((c) & 0xFC00) == 0xD800) | |
65 #define SkUTF16_IsLowSurrogate(c) (((c) & 0xFC00) == 0xDC00) | |
66 | |
67 int SkUTF16_CountUnichars(const uint16_t utf16[]); | |
68 int SkUTF16_CountUnichars(const uint16_t utf16[], int numberOf16BitValues); | |
69 // returns the current unichar and then moves past it (*p++) | |
70 SkUnichar SkUTF16_NextUnichar(const uint16_t**); | |
71 // this guy backs up to the previus unichar value, and returns it (*--p) | |
72 SkUnichar SkUTF16_PrevUnichar(const uint16_t**); | |
73 size_t SkUTF16_FromUnichar(SkUnichar uni, uint16_t utf16[] = NULL); | |
74 | |
75 size_t SkUTF16_ToUTF8(const uint16_t utf16[], int numberOf16BitValues, | |
76 char utf8[] = NULL); | |
77 | |
78 inline bool SkUnichar_IsVariationSelector(SkUnichar uni) { | |
79 /* The 'true' ranges are: | |
80 * 0x180B <= uni <= 0x180D | |
81 * 0xFE00 <= uni <= 0xFE0F | |
82 * 0xE0100 <= uni <= 0xE01EF | |
83 */ | |
84 if (uni < 0x180B || uni > 0xE01EF) { | |
85 return false; | |
86 } | |
87 if ((uni > 0x180D && uni < 0xFE00) || (uni > 0xFE0F && uni < 0xE0100)) { | |
88 return false; | |
89 } | |
90 return true; | |
91 } | |
92 | |
93 /////////////////////////////////////////////////////////////////////////////// | |
94 | |
95 class SkAutoTrace { | |
96 public: | |
97 /** NOTE: label contents are not copied, just the ptr is | |
98 retained, so DON'T DELETE IT. | |
99 */ | |
100 SkAutoTrace(const char label[]) : fLabel(label) { | |
101 SkDebugf("--- trace: %s Enter\n", fLabel); | |
102 } | |
103 ~SkAutoTrace() { | |
104 SkDebugf("--- trace: %s Leave\n", fLabel); | |
105 } | |
106 private: | |
107 const char* fLabel; | |
108 }; | |
109 #define SkAutoTrace(...) SK_REQUIRE_LOCAL_VAR(SkAutoTrace) | |
110 | |
111 #endif | |
OLD | NEW |