@shopify/react-native-skia 0.1.129 → 0.1.130

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/android/cpp/rnskia-android/SkiaOpenGLRenderer.h +1 -0
  2. package/cpp/api/JsiSkRuntimeEffect.h +7 -9
  3. package/cpp/api/JsiSkVertices.h +0 -2
  4. package/cpp/rnskia/values/RNSkValue.h +1 -1
  5. package/cpp/skia/include/codec/SkCodec.h +7 -1
  6. package/cpp/skia/include/core/SkAlphaType.h +45 -0
  7. package/cpp/skia/include/core/SkBitmap.h +4 -2
  8. package/cpp/skia/include/core/SkCanvas.h +31 -20
  9. package/cpp/skia/include/core/SkColor.h +1 -1
  10. package/cpp/skia/include/core/SkColorFilter.h +1 -0
  11. package/cpp/skia/include/core/SkColorType.h +66 -0
  12. package/cpp/skia/include/core/SkDeferredDisplayListRecorder.h +1 -1
  13. package/cpp/skia/include/core/SkDrawable.h +7 -0
  14. package/cpp/skia/include/core/SkEncodedImageFormat.h +1 -0
  15. package/cpp/skia/include/core/SkFont.h +4 -3
  16. package/cpp/skia/include/core/SkFontArguments.h +33 -1
  17. package/cpp/skia/include/core/SkGraphics.h +13 -0
  18. package/cpp/skia/include/core/SkImage.h +67 -22
  19. package/cpp/skia/include/core/SkImageEncoder.h +0 -3
  20. package/cpp/skia/include/core/SkImageGenerator.h +4 -3
  21. package/cpp/skia/include/core/SkImageInfo.h +35 -142
  22. package/cpp/skia/include/core/SkMesh.h +303 -0
  23. package/cpp/skia/include/core/SkMilestone.h +1 -1
  24. package/cpp/skia/include/core/SkOpenTypeSVGDecoder.h +30 -0
  25. package/cpp/skia/include/core/SkPaint.h +4 -19
  26. package/cpp/skia/include/core/SkPath.h +20 -33
  27. package/cpp/skia/include/core/SkPathBuilder.h +1 -6
  28. package/cpp/skia/include/core/SkPixelRef.h +1 -1
  29. package/cpp/skia/include/core/SkPixmap.h +3 -2
  30. package/cpp/skia/include/core/SkRSXform.h +1 -1
  31. package/cpp/skia/include/core/SkSamplingOptions.h +16 -5
  32. package/cpp/skia/include/core/SkSpan.h +5 -5
  33. package/cpp/skia/include/core/SkString.h +5 -8
  34. package/cpp/skia/include/core/SkSurface.h +21 -0
  35. package/cpp/skia/include/core/SkTypeface.h +20 -4
  36. package/cpp/skia/include/core/SkTypes.h +9 -5
  37. package/cpp/skia/include/effects/SkGradientShader.h +9 -18
  38. package/cpp/skia/include/effects/SkRuntimeEffect.h +16 -12
  39. package/cpp/skia/include/gpu/GpuTypes.h +32 -0
  40. package/cpp/skia/include/gpu/GrBackendSemaphore.h +1 -1
  41. package/cpp/skia/include/gpu/GrBackendSurface.h +6 -5
  42. package/cpp/skia/include/gpu/GrBackendSurfaceMutableState.h +1 -1
  43. package/cpp/skia/include/gpu/GrContextOptions.h +11 -20
  44. package/cpp/skia/include/gpu/GrContextThreadSafeProxy.h +7 -0
  45. package/cpp/skia/include/gpu/GrDirectContext.h +16 -11
  46. package/cpp/skia/include/gpu/GrDriverBugWorkaroundsAutogen.h +0 -2
  47. package/cpp/skia/include/gpu/GrRecordingContext.h +14 -7
  48. package/cpp/skia/include/gpu/GrSurfaceInfo.h +6 -6
  49. package/cpp/skia/include/gpu/dawn/GrDawnTypes.h +1 -1
  50. package/cpp/skia/include/gpu/gl/GrGLFunctions.h +3 -1
  51. package/cpp/skia/include/gpu/gl/GrGLInterface.h +2 -2
  52. package/cpp/skia/include/gpu/graphite/BackendTexture.h +64 -0
  53. package/cpp/skia/include/gpu/graphite/Context.h +124 -0
  54. package/cpp/skia/include/gpu/graphite/GraphiteTypes.h +71 -0
  55. package/cpp/skia/include/gpu/graphite/Recorder.h +104 -0
  56. package/cpp/skia/include/gpu/graphite/Recording.h +39 -0
  57. package/cpp/skia/include/gpu/graphite/SkStuff.h +47 -0
  58. package/cpp/skia/include/gpu/graphite/TextureInfo.h +91 -0
  59. package/cpp/skia/include/gpu/graphite/mtl/MtlBackendContext.h +24 -0
  60. package/cpp/skia/include/gpu/graphite/mtl/MtlTypes.h +68 -0
  61. package/cpp/skia/include/gpu/mock/GrMockTypes.h +1 -2
  62. package/cpp/skia/include/ports/SkCFObject.h +0 -4
  63. package/cpp/skia/include/ports/SkTypeface_win.h +2 -2
  64. package/cpp/skia/include/private/{GrSingleOwner.h → SingleOwner.h} +17 -10
  65. package/cpp/skia/include/private/SkChecksum.h +11 -0
  66. package/cpp/skia/include/private/SkEncodedInfo.h +22 -5
  67. package/cpp/skia/include/private/SkFloatingPoint.h +0 -53
  68. package/cpp/skia/include/private/SkImageInfoPriv.h +8 -2
  69. package/cpp/skia/include/private/SkMacros.h +13 -18
  70. package/cpp/skia/include/private/SkMutex.h +8 -0
  71. package/cpp/skia/include/private/SkPathRef.h +2 -16
  72. package/cpp/skia/include/private/SkSLDefines.h +9 -1
  73. package/cpp/skia/include/private/SkSLIRNode.h +6 -5
  74. package/cpp/skia/include/private/SkSLLayout.h +11 -10
  75. package/cpp/skia/include/private/SkSLModifiers.h +4 -3
  76. package/cpp/skia/include/private/SkSLProgramElement.h +2 -2
  77. package/cpp/skia/include/private/SkSLProgramKind.h +8 -5
  78. package/cpp/skia/include/private/SkSLStatement.h +2 -3
  79. package/cpp/skia/include/private/SkSLString.h +17 -56
  80. package/cpp/skia/include/private/SkSLSymbol.h +4 -4
  81. package/cpp/skia/include/private/SkShadowFlags.h +3 -1
  82. package/cpp/skia/include/private/SkStringView.h +47 -0
  83. package/cpp/skia/include/private/SkTArray.h +4 -3
  84. package/cpp/skia/include/private/SkTHash.h +66 -24
  85. package/cpp/skia/include/private/SkTLogic.h +2 -32
  86. package/cpp/skia/include/private/SkTemplates.h +2 -2
  87. package/cpp/skia/include/private/SkThreadAnnotations.h +4 -4
  88. package/cpp/skia/include/private/SkVx.h +28 -28
  89. package/cpp/skia/include/private/chromium/GrSlug.h +40 -3
  90. package/cpp/skia/include/private/chromium/SkChromeRemoteGlyphCache.h +12 -6
  91. package/cpp/skia/include/private/{GrContext_Base.h → gpu/ganesh/GrContext_Base.h} +7 -0
  92. package/cpp/skia/include/private/{GrD3DTypesMinimal.h → gpu/ganesh/GrD3DTypesMinimal.h} +0 -0
  93. package/cpp/skia/include/private/{GrDawnTypesPriv.h → gpu/ganesh/GrDawnTypesPriv.h} +0 -0
  94. package/cpp/skia/include/private/{GrGLTypesPriv.h → gpu/ganesh/GrGLTypesPriv.h} +1 -0
  95. package/cpp/skia/include/private/{GrImageContext.h → gpu/ganesh/GrImageContext.h} +4 -4
  96. package/cpp/skia/include/private/{GrMockTypesPriv.h → gpu/ganesh/GrMockTypesPriv.h} +0 -0
  97. package/cpp/skia/include/private/{GrMtlTypesPriv.h → gpu/ganesh/GrMtlTypesPriv.h} +0 -0
  98. package/cpp/skia/include/private/{GrTypesPriv.h → gpu/ganesh/GrTypesPriv.h} +25 -367
  99. package/cpp/skia/include/private/{GrVkTypesPriv.h → gpu/ganesh/GrVkTypesPriv.h} +0 -0
  100. package/cpp/skia/include/private/gpu/graphite/MtlTypesPriv.h +74 -0
  101. package/cpp/skia/include/sksl/DSL.h +4 -0
  102. package/cpp/skia/include/sksl/DSLBlock.h +8 -3
  103. package/cpp/skia/include/sksl/DSLCase.h +6 -6
  104. package/cpp/skia/include/sksl/DSLCore.h +89 -78
  105. package/cpp/skia/include/sksl/DSLExpression.h +78 -45
  106. package/cpp/skia/include/sksl/DSLFunction.h +23 -18
  107. package/cpp/skia/include/sksl/DSLLayout.h +14 -16
  108. package/cpp/skia/include/sksl/DSLModifiers.h +7 -5
  109. package/cpp/skia/include/sksl/DSLRuntimeEffects.h +1 -1
  110. package/cpp/skia/include/sksl/DSLStatement.h +16 -10
  111. package/cpp/skia/include/sksl/DSLSymbols.h +7 -7
  112. package/cpp/skia/include/sksl/DSLType.h +27 -23
  113. package/cpp/skia/include/sksl/DSLVar.h +72 -61
  114. package/cpp/skia/include/sksl/SkSLErrorReporter.h +12 -49
  115. package/cpp/skia/include/sksl/SkSLOperator.h +151 -0
  116. package/cpp/skia/include/sksl/SkSLPosition.h +102 -0
  117. package/cpp/skia/include/svg/SkSVGCanvas.h +5 -1
  118. package/cpp/skia/include/utils/SkAnimCodecPlayer.h +7 -0
  119. package/cpp/skia/include/utils/SkCamera.h +2 -0
  120. package/cpp/skia/include/utils/SkCanvasStateUtils.h +4 -1
  121. package/cpp/skia/include/utils/SkCustomTypeface.h +6 -4
  122. package/cpp/skia/include/utils/SkNWayCanvas.h +34 -0
  123. package/cpp/skia/include/utils/SkNullCanvas.h +5 -1
  124. package/cpp/skia/include/utils/SkOrderedFontMgr.h +12 -0
  125. package/cpp/skia/include/utils/SkPaintFilterCanvas.h +30 -1
  126. package/cpp/skia/include/utils/SkParse.h +2 -0
  127. package/cpp/skia/include/utils/SkShadowUtils.h +3 -2
  128. package/cpp/skia/include/utils/SkTextUtils.h +8 -4
  129. package/cpp/skia/modules/svg/include/SkSVGAttributeParser.h +27 -1
  130. package/cpp/skia/modules/svg/include/SkSVGDOM.h +4 -0
  131. package/cpp/skia/modules/svg/include/SkSVGOpenTypeSVGDecoder.h +32 -0
  132. package/cpp/skia/modules/svg/include/SkSVGRenderContext.h +3 -3
  133. package/cpp/skia/modules/svg/include/SkSVGSVG.h +2 -0
  134. package/cpp/skia/modules/svg/include/SkSVGTypes.h +48 -9
  135. package/ios/RNSkia-iOS/PlatformContext.h +1 -1
  136. package/ios/RNSkia-iOS/RNSkDrawViewImpl.mm +1 -0
  137. package/ios/RNSkia-iOS/SkiaDrawView.mm +1 -1
  138. package/lib/commonjs/renderer/components/shaders/Shader.js +1 -2
  139. package/lib/commonjs/renderer/components/shaders/Shader.js.map +1 -1
  140. package/lib/module/renderer/components/shaders/Shader.js +1 -2
  141. package/lib/module/renderer/components/shaders/Shader.js.map +1 -1
  142. package/lib/typescript/src/renderer/components/shaders/Shader.d.ts +0 -1
  143. package/lib/typescript/src/skia/types/RuntimeEffect/RuntimeEffect.d.ts +2 -4
  144. package/libs/android/arm64-v8a/libskia.a +0 -0
  145. package/libs/android/arm64-v8a/libsvg.a +0 -0
  146. package/libs/android/armeabi-v7a/libskia.a +0 -0
  147. package/libs/android/armeabi-v7a/libsvg.a +0 -0
  148. package/libs/android/x86/libskia.a +0 -0
  149. package/libs/android/x86/libsvg.a +0 -0
  150. package/libs/android/x86_64/libskia.a +0 -0
  151. package/libs/android/x86_64/libsvg.a +0 -0
  152. package/libs/ios/libskia.xcframework/Info.plist +5 -5
  153. package/libs/ios/libskia.xcframework/ios-arm64_arm64e/libskia.a +0 -0
  154. package/libs/ios/libskia.xcframework/ios-arm64_arm64e_x86_64-simulator/libskia.a +0 -0
  155. package/libs/ios/libskshaper.xcframework/Info.plist +5 -5
  156. package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e/libskshaper.a +0 -0
  157. package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e_x86_64-simulator/libskshaper.a +0 -0
  158. package/libs/ios/libsvg.xcframework/ios-arm64_arm64e/libsvg.a +0 -0
  159. package/libs/ios/libsvg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsvg.a +0 -0
  160. package/package.json +2 -2
  161. package/src/renderer/components/shaders/Shader.tsx +1 -3
  162. package/src/skia/types/RuntimeEffect/RuntimeEffect.ts +1 -8
  163. package/cpp/skia/include/core/SkCustomMesh.h +0 -202
  164. package/cpp/skia/include/core/SkStringView.h +0 -185
  165. package/cpp/skia/include/private/SkPaintParamsKey.h +0 -110
  166. package/cpp/skia/include/private/SkShaderCodeDictionary.h +0 -63
  167. package/cpp/skia/include/private/SkTOptional.h +0 -362
@@ -61,9 +61,9 @@ struct Layout {
61
61
  return result;
62
62
  }
63
63
 
64
- String description() const {
65
- String result;
66
- auto separator = [firstSeparator = true]() mutable -> String {
64
+ std::string description() const {
65
+ std::string result;
66
+ auto separator = [firstSeparator = true]() mutable -> std::string {
67
67
  if (firstSeparator) {
68
68
  firstSeparator = false;
69
69
  return "";
@@ -71,25 +71,26 @@ struct Layout {
71
71
  return ", ";
72
72
  }};
73
73
  if (fLocation >= 0) {
74
- result += separator() + "location = " + to_string(fLocation);
74
+ result += separator() + "location = " + std::to_string(fLocation);
75
75
  }
76
76
  if (fOffset >= 0) {
77
- result += separator() + "offset = " + to_string(fOffset);
77
+ result += separator() + "offset = " + std::to_string(fOffset);
78
78
  }
79
79
  if (fBinding >= 0) {
80
- result += separator() + "binding = " + to_string(fBinding);
80
+ result += separator() + "binding = " + std::to_string(fBinding);
81
81
  }
82
82
  if (fIndex >= 0) {
83
- result += separator() + "index = " + to_string(fIndex);
83
+ result += separator() + "index = " + std::to_string(fIndex);
84
84
  }
85
85
  if (fSet >= 0) {
86
- result += separator() + "set = " + to_string(fSet);
86
+ result += separator() + "set = " + std::to_string(fSet);
87
87
  }
88
88
  if (fBuiltin >= 0) {
89
- result += separator() + "builtin = " + to_string(fBuiltin);
89
+ result += separator() + "builtin = " + std::to_string(fBuiltin);
90
90
  }
91
91
  if (fInputAttachmentIndex >= 0) {
92
- result += separator() + "input_attachment_index = " + to_string(fInputAttachmentIndex);
92
+ result += separator() + "input_attachment_index = " +
93
+ std::to_string(fInputAttachmentIndex);
93
94
  }
94
95
  if (fFlags & kOriginUpperLeft_Flag) {
95
96
  result += separator() + "origin_upper_left";
@@ -9,6 +9,7 @@
9
9
  #define SKSL_MODIFIERS
10
10
 
11
11
  #include "include/private/SkSLLayout.h"
12
+ #include "include/sksl/SkSLPosition.h"
12
13
 
13
14
  #include <vector>
14
15
 
@@ -58,8 +59,8 @@ struct Modifiers {
58
59
  : fLayout(layout)
59
60
  , fFlags(flags) {}
60
61
 
61
- String description() const {
62
- String result = fLayout.description();
62
+ std::string description() const {
63
+ std::string result = fLayout.description();
63
64
 
64
65
  // SkSL extensions
65
66
  if (fFlags & kES3_Flag) {
@@ -117,7 +118,7 @@ struct Modifiers {
117
118
  * Verifies that only permitted modifiers and layout flags are included. Reports errors and
118
119
  * returns false in the event of a violation.
119
120
  */
120
- bool checkPermitted(const Context& context, int line, int permittedModifierFlags,
121
+ bool checkPermitted(const Context& context, Position pos, int permittedModifierFlags,
121
122
  int permittedLayoutFlags) const;
122
123
 
123
124
  Layout fLayout;
@@ -32,8 +32,8 @@ public:
32
32
  kLast = kStructDefinition
33
33
  };
34
34
 
35
- ProgramElement(int offset, Kind kind)
36
- : INHERITED(offset, (int) kind) {
35
+ ProgramElement(Position pos, Kind kind)
36
+ : INHERITED(pos, (int) kind) {
37
37
  SkASSERT(kind >= Kind::kFirst && kind <= Kind::kLast);
38
38
  }
39
39
 
@@ -18,11 +18,14 @@ namespace SkSL {
18
18
  enum class ProgramKind : int8_t {
19
19
  kFragment,
20
20
  kVertex,
21
- kRuntimeColorFilter, // Runtime effect only suitable as SkColorFilter
22
- kRuntimeShader, // " " " " " SkShader
23
- kRuntimeBlender, // " " " " " SkBlender
24
- kCustomMeshVertex, // Vertex portion of a custom mesh
25
- kCustomMeshFragment, // Fragment " " " " "
21
+ kGraphiteFragment,
22
+ kGraphiteVertex,
23
+ kRuntimeColorFilter, // Runtime effect only suitable as SkColorFilter
24
+ kRuntimeShader, // " " " " " SkShader
25
+ kRuntimeBlender, // " " " " " SkBlender
26
+ kPrivateRuntimeShader, // Runtime shader with public restrictions lifted
27
+ kMeshVertex, // Vertex portion of a custom mesh
28
+ kMeshFragment, // Fragment " " " " "
26
29
  kGeneric,
27
30
  };
28
31
 
@@ -27,7 +27,6 @@ public:
27
27
  kExpression,
28
28
  kFor,
29
29
  kIf,
30
- kInlineMarker,
31
30
  kNop,
32
31
  kReturn,
33
32
  kSwitch,
@@ -38,8 +37,8 @@ public:
38
37
  kLast = kVarDeclaration,
39
38
  };
40
39
 
41
- Statement(int line, Kind kind)
42
- : INHERITED(line, (int) kind) {
40
+ Statement(Position pos, Kind kind)
41
+ : INHERITED(pos, (int) kind) {
43
42
  SkASSERT(kind >= Kind::kFirst && kind <= Kind::kLast);
44
43
  }
45
44
 
@@ -8,73 +8,34 @@
8
8
  #ifndef SKSL_STRING
9
9
  #define SKSL_STRING
10
10
 
11
- #include "include/core/SkStringView.h"
11
+ #include "include/core/SkTypes.h"
12
12
  #include "include/private/SkSLDefines.h"
13
- #include <cstring>
13
+
14
14
  #include <stdarg.h>
15
15
  #include <string>
16
-
17
- #ifndef SKSL_STANDALONE
18
- #include "include/core/SkString.h"
19
- #endif
16
+ #include <string_view>
20
17
 
21
18
  namespace SkSL {
22
19
 
23
- class String;
24
-
25
- class SK_API String : public std::string {
26
- public:
27
- using std::string::string;
28
-
29
- explicit String(std::string s) : INHERITED(std::move(s)) {}
30
- explicit String(skstd::string_view s) : INHERITED(s.data(), s.length()) {}
31
- // TODO(johnstiles): add operator skstd::string_view
32
-
33
- static String printf(const char* fmt, ...) SK_PRINTF_LIKE(1, 2);
34
- void appendf(const char* fmt, ...) SK_PRINTF_LIKE(2, 3);
35
- void vappendf(const char* fmt, va_list va);
36
-
37
- bool starts_with(const char prefix[]) const {
38
- return skstd::string_view(data(), size()).starts_with(prefix);
39
- }
40
- bool ends_with(const char suffix[]) const {
41
- return skstd::string_view(data(), size()).ends_with(suffix);
42
- }
43
-
44
- bool consumeSuffix(const char suffix[]);
45
-
46
- String operator+(const char* s) const;
47
- String operator+(const String& s) const;
48
- String operator+(skstd::string_view s) const;
49
- String& operator+=(char c);
50
- String& operator+=(const char* s);
51
- String& operator+=(const String& s);
52
- String& operator+=(skstd::string_view s);
53
- friend String operator+(const char* s1, const String& s2);
20
+ bool stod(std::string_view s, SKSL_FLOAT* value);
21
+ bool stoi(std::string_view s, SKSL_INT* value);
54
22
 
55
- private:
56
- using INHERITED = std::string;
57
- };
23
+ namespace String {
58
24
 
59
- String operator+(skstd::string_view left, skstd::string_view right);
25
+ std::string printf(const char* fmt, ...) SK_PRINTF_LIKE(1, 2);
26
+ void appendf(std::string* str, const char* fmt, ...) SK_PRINTF_LIKE(2, 3);
27
+ void vappendf(std::string* str, const char* fmt, va_list va) SK_PRINTF_LIKE(2, 0);
60
28
 
61
- String to_string(double value);
62
- String to_string(int32_t value);
63
- String to_string(uint32_t value);
64
- String to_string(int64_t value);
65
- String to_string(uint64_t value);
29
+ } // namespace String
30
+ } // namespace SkSL
66
31
 
67
- bool stod(skstd::string_view s, SKSL_FLOAT* value);
68
- bool stoi(skstd::string_view s, SKSL_INT* value);
32
+ namespace skstd {
69
33
 
70
- } // namespace SkSL
34
+ // We use a custom to_string(float|double) which ignores locale settings and writes `1.0` instead
35
+ // of `1.00000`.
36
+ std::string to_string(float value);
37
+ std::string to_string(double value);
71
38
 
72
- namespace std {
73
- template<> struct hash<SkSL::String> {
74
- size_t operator()(const SkSL::String& s) const {
75
- return hash<std::string>{}(s);
76
- }
77
- };
78
- } // namespace std
39
+ } // namespace skstd
79
40
 
80
41
  #endif
@@ -30,8 +30,8 @@ public:
30
30
  kLast = kVariable
31
31
  };
32
32
 
33
- Symbol(int offset, Kind kind, skstd::string_view name, const Type* type = nullptr)
34
- : INHERITED(offset, (int) kind)
33
+ Symbol(Position pos, Kind kind, std::string_view name, const Type* type = nullptr)
34
+ : INHERITED(pos, (int) kind)
35
35
  , fName(name)
36
36
  , fType(type) {
37
37
  SkASSERT(kind >= Kind::kFirst && kind <= Kind::kLast);
@@ -48,7 +48,7 @@ public:
48
48
  return (Kind) fKind;
49
49
  }
50
50
 
51
- skstd::string_view name() const {
51
+ std::string_view name() const {
52
52
  return fName;
53
53
  }
54
54
 
@@ -77,7 +77,7 @@ public:
77
77
  }
78
78
 
79
79
  private:
80
- skstd::string_view fName;
80
+ std::string_view fName;
81
81
  const Type* fType;
82
82
 
83
83
  using INHERITED = IRNode;
@@ -18,8 +18,10 @@ enum SkShadowFlags {
18
18
  kGeometricOnly_ShadowFlag = 0x02,
19
19
  /** Light position represents a direction, light radius is blur radius at elevation 1 */
20
20
  kDirectionalLight_ShadowFlag = 0x04,
21
+ /** Concave paths will only use blur to generate the shadow */
22
+ kConcaveBlurOnly_ShadowFlag = 0x08,
21
23
  /** mask for all shadow flags */
22
- kAll_ShadowFlag = 0x07
24
+ kAll_ShadowFlag = 0x0F
23
25
  };
24
26
 
25
27
  #endif
@@ -0,0 +1,47 @@
1
+ /*
2
+ * Copyright 2021 Google LLC.
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 SkStringView_DEFINED
9
+ #define SkStringView_DEFINED
10
+
11
+ #include <string.h>
12
+ #include <string_view>
13
+
14
+ namespace skstd {
15
+
16
+ // C++20 additions
17
+ inline constexpr bool starts_with(std::string_view str, std::string_view prefix) {
18
+ if (prefix.length() > str.length()) {
19
+ return false;
20
+ }
21
+ return prefix.length() == 0 || !memcmp(str.data(), prefix.data(), prefix.length());
22
+ }
23
+
24
+ inline constexpr bool starts_with(std::string_view str, std::string_view::value_type c) {
25
+ return !str.empty() && str.front() == c;
26
+ }
27
+
28
+ inline constexpr bool ends_with(std::string_view str, std::string_view suffix) {
29
+ if (suffix.length() > str.length()) {
30
+ return false;
31
+ }
32
+ return suffix.length() == 0 || !memcmp(str.data() + str.length() - suffix.length(),
33
+ suffix.data(), suffix.length());
34
+ }
35
+
36
+ inline constexpr bool ends_with(std::string_view str, std::string_view::value_type c) {
37
+ return !str.empty() && str.back() == c;
38
+ }
39
+
40
+ // C++23 additions
41
+ inline constexpr bool contains(std::string_view str, std::string_view needle) {
42
+ return str.find(needle) != std::string_view::npos;
43
+ }
44
+
45
+ } // namespace skstd
46
+
47
+ #endif
@@ -16,6 +16,7 @@
16
16
  #include "include/private/SkTemplates.h"
17
17
  #include "include/private/SkTo.h"
18
18
 
19
+ #include <algorithm>
19
20
  #include <string.h>
20
21
  #include <initializer_list>
21
22
  #include <memory>
@@ -477,15 +478,15 @@ private:
477
478
  SkASSERT(count >= 0);
478
479
  SkASSERT(preallocCount > 0);
479
480
  SkASSERT(preallocStorage);
480
- fCount = count;
481
+ fCount = SkToU32(count);
481
482
  fItemArray = nullptr;
482
483
  fReserved = false;
483
484
  if (count > preallocCount) {
484
- fAllocCount = std::max(count, kMinHeapAllocCount);
485
+ fAllocCount = SkToU32(std::max(count, kMinHeapAllocCount));
485
486
  fItemArray = (T*)sk_malloc_throw(fAllocCount, sizeof(T));
486
487
  fOwnMemory = true;
487
488
  } else {
488
- fAllocCount = preallocCount;
489
+ fAllocCount = SkToU32(preallocCount);
489
490
  fItemArray = (T*)preallocStorage;
490
491
  fOwnMemory = false;
491
492
  }
@@ -11,6 +11,8 @@
11
11
  #include "include/core/SkTypes.h"
12
12
  #include "include/private/SkChecksum.h"
13
13
  #include "include/private/SkTemplates.h"
14
+
15
+ #include <initializer_list>
14
16
  #include <new>
15
17
  #include <utility>
16
18
 
@@ -134,6 +136,27 @@ public:
134
136
  }
135
137
  }
136
138
 
139
+ // Hash tables will automatically resize themselves when set() and remove() are called, but
140
+ // resize() can be called to manually grow capacity before a bulk insertion.
141
+ void resize(int capacity) {
142
+ SkASSERT(capacity >= fCount);
143
+ int oldCapacity = fCapacity;
144
+ SkDEBUGCODE(int oldCount = fCount);
145
+
146
+ fCount = 0;
147
+ fCapacity = capacity;
148
+ SkAutoTArray<Slot> oldSlots = std::move(fSlots);
149
+ fSlots = SkAutoTArray<Slot>(capacity);
150
+
151
+ for (int i = 0; i < oldCapacity; i++) {
152
+ Slot& s = oldSlots[i];
153
+ if (s.has_value()) {
154
+ this->uncheckedSet(*std::move(s));
155
+ }
156
+ }
157
+ SkASSERT(fCount == oldCount);
158
+ }
159
+
137
160
  // Call fn on every entry in the table. You may mutate the entries, but be very careful.
138
161
  template <typename Fn> // f(T*)
139
162
  void foreach(Fn&& fn) {
@@ -259,24 +282,6 @@ private:
259
282
  return nullptr;
260
283
  }
261
284
 
262
- void resize(int capacity) {
263
- int oldCapacity = fCapacity;
264
- SkDEBUGCODE(int oldCount = fCount);
265
-
266
- fCount = 0;
267
- fCapacity = capacity;
268
- SkAutoTArray<Slot> oldSlots = std::move(fSlots);
269
- fSlots = SkAutoTArray<Slot>(capacity);
270
-
271
- for (int i = 0; i < oldCapacity; i++) {
272
- Slot& s = oldSlots[i];
273
- if (s.has_value()) {
274
- this->uncheckedSet(*std::move(s));
275
- }
276
- }
277
- SkASSERT(fCount == oldCount);
278
- }
279
-
280
285
  void removeSlot(int index) {
281
286
  fCount--;
282
287
 
@@ -413,12 +418,38 @@ private:
413
418
  template <typename K, typename V, typename HashK = SkGoodHash>
414
419
  class SkTHashMap {
415
420
  public:
421
+ // Allow default construction and assignment.
422
+ SkTHashMap() = default;
423
+
424
+ SkTHashMap(SkTHashMap<K, V, HashK>&& that) = default;
425
+ SkTHashMap(const SkTHashMap<K, V, HashK>& that) = default;
426
+
427
+ SkTHashMap<K, V, HashK>& operator=(SkTHashMap<K, V, HashK>&& that) = default;
428
+ SkTHashMap<K, V, HashK>& operator=(const SkTHashMap<K, V, HashK>& that) = default;
429
+
430
+ // Construct with an initializer list of key-value pairs.
431
+ struct Pair : public std::pair<K, V> {
432
+ using std::pair<K, V>::pair;
433
+ static const K& GetKey(const Pair& p) { return p.first; }
434
+ static auto Hash(const K& key) { return HashK()(key); }
435
+ };
436
+
437
+ SkTHashMap(std::initializer_list<Pair> pairs) {
438
+ fTable.resize(pairs.size() * 5 / 3);
439
+ for (const Pair& p : pairs) {
440
+ fTable.set(p);
441
+ }
442
+ }
443
+
416
444
  // Clear the map.
417
445
  void reset() { fTable.reset(); }
418
446
 
419
447
  // How many key/value pairs are in the table?
420
448
  int count() const { return fTable.count(); }
421
449
 
450
+ // Is empty?
451
+ bool empty() const { return fTable.count() == 0; }
452
+
422
453
  // Approximately how many bytes of memory do we use beyond sizeof(*this)?
423
454
  size_t approxBytesUsed() const { return fTable.approxBytesUsed(); }
424
455
 
@@ -466,12 +497,6 @@ public:
466
497
  }
467
498
 
468
499
  // Dereferencing an iterator gives back a key-value pair, suitable for structured binding.
469
- struct Pair : public std::pair<K, V> {
470
- using std::pair<K, V>::pair;
471
- static const K& GetKey(const Pair& p) { return p.first; }
472
- static auto Hash(const K& key) { return HashK()(key); }
473
- };
474
-
475
500
  using Iter = typename SkTHashTable<Pair, K>::template Iter<std::pair<K, V>>;
476
501
 
477
502
  Iter begin() const {
@@ -490,6 +515,23 @@ private:
490
515
  template <typename T, typename HashT = SkGoodHash>
491
516
  class SkTHashSet {
492
517
  public:
518
+ // Allow default construction and assignment.
519
+ SkTHashSet() = default;
520
+
521
+ SkTHashSet(SkTHashSet<T, HashT>&& that) = default;
522
+ SkTHashSet(const SkTHashSet<T, HashT>& that) = default;
523
+
524
+ SkTHashSet<T, HashT>& operator=(SkTHashSet<T, HashT>&& that) = default;
525
+ SkTHashSet<T, HashT>& operator=(const SkTHashSet<T, HashT>& that) = default;
526
+
527
+ // Construct with an initializer list of Ts.
528
+ SkTHashSet(std::initializer_list<T> vals) {
529
+ fTable.resize(vals.size() * 5 / 3);
530
+ for (const T& val : vals) {
531
+ fTable.set(val);
532
+ }
533
+ }
534
+
493
535
  // Clear the set.
494
536
  void reset() { fTable.reset(); }
495
537
 
@@ -12,40 +12,10 @@
12
12
  #ifndef SkTLogic_DEFINED
13
13
  #define SkTLogic_DEFINED
14
14
 
15
- #include <cstddef>
15
+ #include <iterator>
16
16
  #include <type_traits>
17
- #include <utility>
18
17
  #include "include/private/SkTo.h"
19
18
 
20
- namespace skstd {
21
-
22
- // C++17, <variant>
23
- struct monostate {};
24
-
25
- // C++17, <type_traits>
26
- template<typename...> struct conjunction : std::true_type { };
27
- template<typename T> struct conjunction<T> : T { };
28
- template<typename T, typename... Ts>
29
- struct conjunction<T, Ts...> : std::conditional<bool(T::value), conjunction<Ts...>, T>::type { };
30
-
31
- // C++17, std::data, std::size
32
- template<typename Container>
33
- constexpr auto data(Container& c) -> decltype(c.data()) { return c.data(); }
34
- template<typename Container>
35
- constexpr auto data(const Container& c) -> decltype(c.data()) { return c.data(); }
36
- template<typename Array, size_t N>
37
- constexpr auto data(Array(&a)[N]) -> decltype(a) { return a; }
38
- template<typename T>
39
- constexpr const T* data(std::initializer_list<T> i) { return i.begin(); }
40
-
41
- template<typename Container>
42
- constexpr auto size(Container& c) -> decltype(c.size()) { return c.size(); }
43
- template<typename Array, size_t N>
44
- constexpr size_t size(Array(&)[N]) { return N; }
45
- template<typename T>
46
- constexpr const T* size(std::initializer_list<T> i) { return i.end() - i.begin(); }
47
- } // namespace skstd
48
-
49
19
  // The sknonstd namespace contains things we would like to be proposed and feel std-ish.
50
20
  namespace sknonstd {
51
21
 
@@ -81,6 +51,6 @@ template <typename D, typename S> using same_cv_t = typename same_cv<D, S>::type
81
51
  } // namespace sknonstd
82
52
 
83
53
  template <typename Container>
84
- constexpr int SkCount(const Container& c) { return SkTo<int>(skstd::size(c)); }
54
+ constexpr int SkCount(const Container& c) { return SkTo<int>(std::size(c)); }
85
55
 
86
56
  #endif
@@ -35,14 +35,14 @@ template<typename T> inline void sk_ignore_unused_variable(const T&) { }
35
35
  /**
36
36
  * Returns a pointer to a D which comes immediately after S[count].
37
37
  */
38
- template <typename D, typename S> static D* SkTAfter(S* ptr, size_t count = 1) {
38
+ template <typename D, typename S> inline D* SkTAfter(S* ptr, size_t count = 1) {
39
39
  return reinterpret_cast<D*>(ptr + count);
40
40
  }
41
41
 
42
42
  /**
43
43
  * Returns a pointer to a D which comes byteOffset bytes after S.
44
44
  */
45
- template <typename D, typename S> static D* SkTAddOffset(S* ptr, ptrdiff_t byteOffset) {
45
+ template <typename D, typename S> inline D* SkTAddOffset(S* ptr, ptrdiff_t byteOffset) {
46
46
  // The intermediate char* has the same cv-ness as D as this produces better error messages.
47
47
  // This relies on the fact that reinterpret_cast can add constness, but cannot remove it.
48
48
  return reinterpret_cast<D*>(reinterpret_cast<sknonstd::same_cv_t<char, D>*>(ptr) + byteOffset);
@@ -78,11 +78,11 @@
78
78
 
79
79
  #if defined(SK_BUILD_FOR_GOOGLE3) && !defined(SK_BUILD_FOR_WASM_IN_GOOGLE3)
80
80
  extern "C" {
81
- void __google_potentially_blocking_region_begin(void);
82
- void __google_potentially_blocking_region_end (void);
81
+ void __google_cxa_guard_acquire_begin(void);
82
+ void __google_cxa_guard_acquire_end (void);
83
83
  }
84
- #define SK_POTENTIALLY_BLOCKING_REGION_BEGIN __google_potentially_blocking_region_begin()
85
- #define SK_POTENTIALLY_BLOCKING_REGION_END __google_potentially_blocking_region_end()
84
+ #define SK_POTENTIALLY_BLOCKING_REGION_BEGIN __google_cxa_guard_acquire_begin()
85
+ #define SK_POTENTIALLY_BLOCKING_REGION_END __google_cxa_guard_acquire_end()
86
86
  #else
87
87
  #define SK_POTENTIALLY_BLOCKING_REGION_BEGIN
88
88
  #define SK_POTENTIALLY_BLOCKING_REGION_END
@@ -858,20 +858,20 @@ SI void strided_load4(const T* v, \
858
858
  c = skvx::bit_pun<skvx::Vec<N,T>>(mat.val[2]); \
859
859
  d = skvx::bit_pun<skvx::Vec<N,T>>(mat.val[3]); \
860
860
  }
861
- IMPL_LOAD4_TRANSPOSED(2, uint32_t, vld4_u32);
862
- IMPL_LOAD4_TRANSPOSED(4, uint16_t, vld4_u16);
863
- IMPL_LOAD4_TRANSPOSED(8, uint8_t, vld4_u8);
864
- IMPL_LOAD4_TRANSPOSED(2, int32_t, vld4_s32);
865
- IMPL_LOAD4_TRANSPOSED(4, int16_t, vld4_s16);
866
- IMPL_LOAD4_TRANSPOSED(8, int8_t, vld4_s8);
867
- IMPL_LOAD4_TRANSPOSED(2, float, vld4_f32);
868
- IMPL_LOAD4_TRANSPOSED(4, uint32_t, vld4q_u32);
869
- IMPL_LOAD4_TRANSPOSED(8, uint16_t, vld4q_u16);
870
- IMPL_LOAD4_TRANSPOSED(16, uint8_t, vld4q_u8);
871
- IMPL_LOAD4_TRANSPOSED(4, int32_t, vld4q_s32);
872
- IMPL_LOAD4_TRANSPOSED(8, int16_t, vld4q_s16);
873
- IMPL_LOAD4_TRANSPOSED(16, int8_t, vld4q_s8);
874
- IMPL_LOAD4_TRANSPOSED(4, float, vld4q_f32);
861
+ IMPL_LOAD4_TRANSPOSED(2, uint32_t, vld4_u32)
862
+ IMPL_LOAD4_TRANSPOSED(4, uint16_t, vld4_u16)
863
+ IMPL_LOAD4_TRANSPOSED(8, uint8_t, vld4_u8)
864
+ IMPL_LOAD4_TRANSPOSED(2, int32_t, vld4_s32)
865
+ IMPL_LOAD4_TRANSPOSED(4, int16_t, vld4_s16)
866
+ IMPL_LOAD4_TRANSPOSED(8, int8_t, vld4_s8)
867
+ IMPL_LOAD4_TRANSPOSED(2, float, vld4_f32)
868
+ IMPL_LOAD4_TRANSPOSED(4, uint32_t, vld4q_u32)
869
+ IMPL_LOAD4_TRANSPOSED(8, uint16_t, vld4q_u16)
870
+ IMPL_LOAD4_TRANSPOSED(16, uint8_t, vld4q_u8)
871
+ IMPL_LOAD4_TRANSPOSED(4, int32_t, vld4q_s32)
872
+ IMPL_LOAD4_TRANSPOSED(8, int16_t, vld4q_s16)
873
+ IMPL_LOAD4_TRANSPOSED(16, int8_t, vld4q_s8)
874
+ IMPL_LOAD4_TRANSPOSED(4, float, vld4q_f32)
875
875
  #undef IMPL_LOAD4_TRANSPOSED
876
876
 
877
877
  #elif SKVX_USE_SIMD && defined(__SSE__)
@@ -913,20 +913,20 @@ SI void strided_load2(const T* v, skvx::Vec<N,T>& a, skvx::Vec<N,T>& b) { \
913
913
  a = skvx::bit_pun<skvx::Vec<N,T>>(mat.val[0]); \
914
914
  b = skvx::bit_pun<skvx::Vec<N,T>>(mat.val[1]); \
915
915
  }
916
- IMPL_LOAD2_TRANSPOSED(2, uint32_t, vld2_u32);
917
- IMPL_LOAD2_TRANSPOSED(4, uint16_t, vld2_u16);
918
- IMPL_LOAD2_TRANSPOSED(8, uint8_t, vld2_u8);
919
- IMPL_LOAD2_TRANSPOSED(2, int32_t, vld2_s32);
920
- IMPL_LOAD2_TRANSPOSED(4, int16_t, vld2_s16);
921
- IMPL_LOAD2_TRANSPOSED(8, int8_t, vld2_s8);
922
- IMPL_LOAD2_TRANSPOSED(2, float, vld2_f32);
923
- IMPL_LOAD2_TRANSPOSED(4, uint32_t, vld2q_u32);
924
- IMPL_LOAD2_TRANSPOSED(8, uint16_t, vld2q_u16);
925
- IMPL_LOAD2_TRANSPOSED(16, uint8_t, vld2q_u8);
926
- IMPL_LOAD2_TRANSPOSED(4, int32_t, vld2q_s32);
927
- IMPL_LOAD2_TRANSPOSED(8, int16_t, vld2q_s16);
928
- IMPL_LOAD2_TRANSPOSED(16, int8_t, vld2q_s8);
929
- IMPL_LOAD2_TRANSPOSED(4, float, vld2q_f32);
916
+ IMPL_LOAD2_TRANSPOSED(2, uint32_t, vld2_u32)
917
+ IMPL_LOAD2_TRANSPOSED(4, uint16_t, vld2_u16)
918
+ IMPL_LOAD2_TRANSPOSED(8, uint8_t, vld2_u8)
919
+ IMPL_LOAD2_TRANSPOSED(2, int32_t, vld2_s32)
920
+ IMPL_LOAD2_TRANSPOSED(4, int16_t, vld2_s16)
921
+ IMPL_LOAD2_TRANSPOSED(8, int8_t, vld2_s8)
922
+ IMPL_LOAD2_TRANSPOSED(2, float, vld2_f32)
923
+ IMPL_LOAD2_TRANSPOSED(4, uint32_t, vld2q_u32)
924
+ IMPL_LOAD2_TRANSPOSED(8, uint16_t, vld2q_u16)
925
+ IMPL_LOAD2_TRANSPOSED(16, uint8_t, vld2q_u8)
926
+ IMPL_LOAD2_TRANSPOSED(4, int32_t, vld2q_s32)
927
+ IMPL_LOAD2_TRANSPOSED(8, int16_t, vld2q_s16)
928
+ IMPL_LOAD2_TRANSPOSED(16, int8_t, vld2q_s8)
929
+ IMPL_LOAD2_TRANSPOSED(4, float, vld2q_f32)
930
930
  #undef IMPL_LOAD2_TRANSPOSED
931
931
  #endif
932
932