@shopify/react-native-skia 0.1.192 → 0.1.194
Sign up to get free protection for your applications and to get access to all the features.
- package/android/CMakeLists.txt +1 -1
- package/android/build.gradle +1 -0
- package/android/cpp/jni/JniPlatformContext.cpp +1 -1
- package/android/src/main/java/com/shopify/reactnative/skia/ViewScreenshotService.java +104 -103
- package/cpp/api/JsiSkImage.h +25 -4
- package/cpp/api/JsiSkImageFactory.h +2 -2
- package/cpp/api/JsiSkPath.h +8 -6
- package/cpp/rnskia/dom/base/Declaration.h +5 -7
- package/cpp/rnskia/dom/base/JsiDomDrawingNode.h +3 -1
- package/cpp/rnskia/dom/nodes/JsiBlurMaskNode.h +1 -0
- package/cpp/rnskia/dom/nodes/JsiPathNode.h +2 -2
- package/cpp/rnskia/dom/props/BoxShadowProps.h +2 -0
- package/cpp/skia/include/android/SkAndroidFrameworkUtils.h +2 -8
- package/cpp/skia/include/android/SkImageAndroid.h +101 -0
- package/cpp/skia/include/codec/SkAndroidCodec.h +26 -8
- package/cpp/skia/include/codec/SkCodec.h +31 -17
- package/cpp/skia/include/codec/SkEncodedImageFormat.h +36 -0
- package/cpp/skia/include/codec/SkPixmapUtils.h +31 -0
- package/cpp/skia/include/config/SkUserConfig.h +61 -29
- package/cpp/skia/include/core/SkBitmap.h +25 -25
- package/cpp/skia/include/core/SkBlurTypes.h +0 -2
- package/cpp/skia/include/core/SkCanvas.h +32 -15
- package/cpp/skia/include/core/SkCapabilities.h +2 -2
- package/cpp/skia/include/core/SkColor.h +2 -0
- package/cpp/skia/include/core/SkColorPriv.h +19 -4
- package/cpp/skia/include/core/SkColorSpace.h +14 -17
- package/cpp/skia/include/core/SkColorType.h +1 -0
- package/cpp/skia/include/core/SkContourMeasure.h +1 -1
- package/cpp/skia/include/core/SkCoverageMode.h +0 -2
- package/cpp/skia/include/core/SkCubicMap.h +2 -0
- package/cpp/skia/include/core/SkData.h +5 -2
- package/cpp/skia/include/core/SkDataTable.h +6 -2
- package/cpp/skia/include/core/SkDeferredDisplayList.h +11 -10
- package/cpp/skia/include/core/SkDeferredDisplayListRecorder.h +9 -8
- package/cpp/skia/include/core/SkDrawable.h +10 -2
- package/cpp/skia/include/core/SkEncodedImageFormat.h +3 -30
- package/cpp/skia/include/core/SkFlattenable.h +4 -2
- package/cpp/skia/include/core/SkFont.h +1 -0
- package/cpp/skia/include/core/SkFontMetrics.h +1 -0
- package/cpp/skia/include/core/SkFontMgr.h +20 -29
- package/cpp/skia/include/core/SkFontStyle.h +4 -1
- package/cpp/skia/include/core/SkGraphics.h +21 -18
- package/cpp/skia/include/core/SkICC.h +3 -13
- package/cpp/skia/include/core/SkImage.h +395 -717
- package/cpp/skia/include/core/SkImageGenerator.h +19 -74
- package/cpp/skia/include/core/SkImageInfo.h +7 -5
- package/cpp/skia/include/core/SkM44.h +11 -0
- package/cpp/skia/include/core/SkMaskFilter.h +6 -3
- package/cpp/skia/include/core/SkMatrix.h +14 -4
- package/cpp/skia/include/core/SkMesh.h +52 -18
- package/cpp/skia/include/core/SkMilestone.h +1 -1
- package/cpp/skia/include/core/SkPaint.h +11 -34
- package/cpp/skia/include/core/SkPath.h +23 -4
- package/cpp/skia/include/core/SkPathBuilder.h +13 -5
- package/cpp/skia/include/core/SkPathMeasure.h +1 -1
- package/cpp/skia/include/core/SkPathTypes.h +0 -2
- package/cpp/skia/include/core/SkPathUtils.h +42 -0
- package/cpp/skia/include/core/SkPicture.h +3 -2
- package/cpp/skia/include/core/SkPictureRecorder.h +2 -0
- package/cpp/skia/include/core/SkPixelRef.h +4 -8
- package/cpp/skia/include/core/SkPixmap.h +12 -20
- package/cpp/skia/include/core/SkPoint.h +4 -2
- package/cpp/skia/include/core/SkPromiseImageTexture.h +2 -2
- package/cpp/skia/include/core/SkRRect.h +5 -1
- package/cpp/skia/include/core/SkRect.h +6 -3
- package/cpp/skia/include/core/SkRefCnt.h +9 -14
- package/cpp/skia/include/core/SkRegion.h +1 -1
- package/cpp/skia/include/core/SkScalar.h +2 -4
- package/cpp/skia/include/core/SkSerialProcs.h +18 -10
- package/cpp/skia/include/core/SkShader.h +1 -64
- package/cpp/skia/include/core/SkSize.h +2 -0
- package/cpp/skia/include/core/SkSpan.h +4 -112
- package/cpp/skia/include/core/SkStream.h +11 -12
- package/cpp/skia/include/core/SkString.h +9 -25
- package/cpp/skia/include/core/SkStrokeRec.h +1 -1
- package/cpp/skia/include/core/SkSurface.h +83 -61
- package/cpp/skia/include/core/SkSurfaceCharacterization.h +3 -3
- package/cpp/skia/include/core/SkSurfaceProps.h +9 -1
- package/cpp/skia/include/core/SkTextBlob.h +2 -2
- package/cpp/skia/include/core/SkTextureCompressionType.h +30 -0
- package/cpp/skia/include/core/SkTime.h +1 -1
- package/cpp/skia/include/core/SkTypeface.h +9 -2
- package/cpp/skia/include/core/SkTypes.h +37 -466
- package/cpp/skia/include/core/SkVertices.h +2 -0
- package/cpp/skia/include/core/SkYUVAInfo.h +4 -0
- package/cpp/skia/include/core/SkYUVAPixmaps.h +7 -1
- package/cpp/skia/include/docs/SkPDFDocument.h +12 -1
- package/cpp/skia/include/effects/SkColorMatrix.h +2 -1
- package/cpp/skia/include/effects/SkGradientShader.h +65 -14
- package/cpp/skia/include/effects/SkImageFilters.h +0 -11
- package/cpp/skia/include/effects/SkRuntimeEffect.h +41 -11
- package/cpp/skia/include/encode/SkEncoder.h +7 -3
- package/cpp/skia/include/encode/SkICC.h +36 -0
- package/cpp/skia/include/encode/SkJpegEncoder.h +102 -71
- package/cpp/skia/include/encode/SkPngEncoder.h +89 -71
- package/cpp/skia/include/encode/SkWebpEncoder.h +65 -38
- package/cpp/skia/include/gpu/GpuTypes.h +23 -1
- package/cpp/skia/include/gpu/GrBackendSurface.h +9 -7
- package/cpp/skia/include/gpu/GrContextOptions.h +28 -9
- package/cpp/skia/include/gpu/GrContextThreadSafeProxy.h +6 -4
- package/cpp/skia/include/gpu/GrDirectContext.h +84 -63
- package/cpp/skia/include/gpu/GrDriverBugWorkarounds.h +2 -1
- package/cpp/skia/include/gpu/GrRecordingContext.h +9 -5
- package/cpp/skia/include/gpu/GrTypes.h +18 -18
- package/cpp/skia/include/gpu/d3d/GrD3DTypes.h +4 -4
- package/cpp/skia/include/gpu/dawn/GrDawnTypes.h +3 -3
- package/cpp/skia/include/gpu/ganesh/GrTextureGenerator.h +77 -0
- package/cpp/skia/include/gpu/ganesh/SkImageGanesh.h +385 -0
- package/cpp/skia/include/gpu/gl/GrGLExtensions.h +3 -3
- package/cpp/skia/include/gpu/gl/GrGLFunctions.h +1 -1
- package/cpp/skia/include/gpu/gl/GrGLInterface.h +0 -3
- package/cpp/skia/include/gpu/gl/GrGLTypes.h +2 -1
- package/cpp/skia/include/gpu/graphite/BackendTexture.h +72 -3
- package/cpp/skia/include/gpu/graphite/Context.h +85 -32
- package/cpp/skia/include/gpu/graphite/ContextOptions.h +15 -11
- package/cpp/skia/include/gpu/graphite/GraphiteTypes.h +55 -5
- package/cpp/skia/include/gpu/graphite/ImageProvider.h +6 -4
- package/cpp/skia/include/gpu/graphite/Recorder.h +41 -11
- package/cpp/skia/include/gpu/graphite/Recording.h +50 -3
- package/cpp/skia/include/gpu/graphite/TextureInfo.h +47 -8
- package/cpp/skia/include/gpu/graphite/YUVABackendTextures.h +139 -0
- package/cpp/skia/include/gpu/graphite/dawn/DawnTypes.h +40 -0
- package/cpp/skia/include/gpu/graphite/dawn/DawnUtils.h +28 -0
- package/cpp/skia/include/gpu/graphite/mtl/MtlBackendContext.h +1 -1
- package/cpp/skia/include/gpu/graphite/mtl/{MtlTypes.h → MtlGraphiteTypes.h} +7 -6
- package/cpp/skia/include/gpu/graphite/mtl/MtlGraphiteUtils.h +27 -0
- package/cpp/skia/include/gpu/graphite/vk/VulkanGraphiteTypes.h +4 -9
- package/cpp/skia/include/gpu/graphite/vk/VulkanGraphiteUtils.h +28 -0
- package/cpp/skia/include/gpu/mock/GrMockTypes.h +17 -13
- package/cpp/skia/include/gpu/mtl/GrMtlTypes.h +2 -2
- package/cpp/skia/include/gpu/vk/GrVkBackendContext.h +1 -1
- package/cpp/skia/include/gpu/vk/GrVkTypes.h +3 -3
- package/cpp/skia/include/gpu/vk/VulkanExtensions.h +3 -3
- package/cpp/skia/include/gpu/vk/VulkanMemoryAllocator.h +5 -7
- package/cpp/skia/include/pathops/SkPathOps.h +3 -3
- package/cpp/skia/include/ports/SkFontMgr_data.h +22 -0
- package/cpp/skia/include/ports/SkFontMgr_indirect.h +14 -14
- package/cpp/skia/include/ports/SkRemotableFontMgr.h +2 -2
- package/cpp/skia/include/ports/SkTypeface_win.h +2 -1
- package/cpp/skia/include/private/SkChecksum.h +32 -7
- package/cpp/skia/include/private/SkColorData.h +1 -26
- package/cpp/skia/include/private/SkGainmapInfo.h +97 -0
- package/cpp/skia/include/private/SkGainmapShader.h +53 -0
- package/cpp/skia/include/private/SkIDChangeListener.h +4 -3
- package/cpp/skia/include/private/SkJpegGainmapEncoder.h +71 -0
- package/cpp/skia/include/private/SkJpegMetadataDecoder.h +61 -0
- package/cpp/skia/include/private/SkOpts_spi.h +3 -1
- package/cpp/skia/include/private/SkPathRef.h +64 -47
- package/cpp/skia/include/private/SkSLDefines.h +5 -5
- package/cpp/skia/include/private/SkSLSampleUsage.h +0 -4
- package/cpp/skia/include/private/SkSpinlock.h +1 -1
- package/cpp/skia/include/private/SkWeakRefCnt.h +3 -0
- package/cpp/skia/include/private/{SingleOwner.h → base/SingleOwner.h} +8 -5
- package/cpp/skia/include/private/base/SkAPI.h +52 -0
- package/cpp/skia/include/private/base/SkAlign.h +39 -0
- package/cpp/skia/include/private/base/SkAlignedStorage.h +32 -0
- package/cpp/skia/include/private/base/SkAssert.h +92 -0
- package/cpp/skia/include/private/base/SkAttributes.h +102 -0
- package/cpp/skia/include/private/base/SkCPUTypes.h +25 -0
- package/cpp/skia/include/private/base/SkContainers.h +46 -0
- package/cpp/skia/include/private/base/SkDebug.h +27 -0
- package/cpp/skia/include/private/{SkDeque.h → base/SkDeque.h} +3 -1
- package/cpp/skia/include/private/base/SkFeatures.h +151 -0
- package/cpp/skia/include/private/{SkFixed.h → base/SkFixed.h} +9 -7
- package/cpp/skia/include/private/{SkFloatBits.h → base/SkFloatBits.h} +2 -3
- package/cpp/skia/include/private/{SkFloatingPoint.h → base/SkFloatingPoint.h} +18 -9
- package/cpp/skia/include/private/base/SkLoadUserConfig.h +63 -0
- package/cpp/skia/include/private/{SkMacros.h → base/SkMacros.h} +17 -2
- package/cpp/skia/include/private/{SkMalloc.h → base/SkMalloc.h} +4 -7
- package/cpp/skia/include/{core → private/base}/SkMath.h +25 -2
- package/cpp/skia/include/private/{SkMutex.h → base/SkMutex.h} +5 -5
- package/cpp/skia/include/private/{SkNoncopyable.h → base/SkNoncopyable.h} +2 -2
- package/cpp/skia/include/private/{SkOnce.h → base/SkOnce.h} +3 -1
- package/cpp/skia/include/private/base/SkPathEnums.h +25 -0
- package/cpp/skia/include/private/{SkSafe32.h → base/SkSafe32.h} +16 -1
- package/cpp/skia/include/private/{SkSemaphore.h → base/SkSemaphore.h} +4 -3
- package/cpp/skia/include/private/base/SkSpan_impl.h +129 -0
- package/cpp/skia/include/private/base/SkTArray.h +694 -0
- package/cpp/skia/include/private/{SkTDArray.h → base/SkTDArray.h} +17 -54
- package/cpp/skia/include/private/{SkTFitsIn.h → base/SkTFitsIn.h} +14 -8
- package/cpp/skia/include/private/{SkTLogic.h → base/SkTLogic.h} +1 -1
- package/cpp/skia/include/private/{SkTemplates.h → base/SkTemplates.h} +63 -88
- package/cpp/skia/include/private/{SkThreadID.h → base/SkThreadID.h} +5 -2
- package/cpp/skia/include/private/{SkTo.h → base/SkTo.h} +13 -2
- package/cpp/skia/include/private/base/SkTypeTraits.h +33 -0
- package/cpp/skia/include/private/chromium/GrVkSecondaryCBDrawContext.h +130 -0
- package/cpp/skia/include/private/chromium/SkChromeRemoteGlyphCache.h +5 -9
- package/cpp/skia/include/private/chromium/SkDiscardableMemory.h +70 -0
- package/cpp/skia/include/private/chromium/Slug.h +0 -9
- package/cpp/skia/include/private/gpu/ganesh/GrContext_Base.h +2 -1
- package/cpp/skia/include/private/gpu/ganesh/GrD3DTypesMinimal.h +1 -1
- package/cpp/skia/include/private/gpu/ganesh/GrDawnTypesPriv.h +1 -1
- package/cpp/skia/include/private/gpu/ganesh/GrGLTypesPriv.h +1 -1
- package/cpp/skia/include/private/gpu/ganesh/GrImageContext.h +1 -1
- package/cpp/skia/include/private/gpu/ganesh/GrMockTypesPriv.h +3 -2
- package/cpp/skia/include/private/gpu/ganesh/GrMtlTypesPriv.h +1 -1
- package/cpp/skia/include/private/gpu/ganesh/GrTypesPriv.h +17 -23
- package/cpp/skia/include/private/gpu/ganesh/GrVkTypesPriv.h +2 -2
- package/cpp/skia/include/private/gpu/graphite/DawnTypesPriv.h +38 -0
- package/cpp/skia/include/private/gpu/graphite/{MtlTypesPriv.h → MtlGraphiteTypesPriv.h} +5 -5
- package/cpp/skia/include/private/gpu/graphite/VulkanGraphiteTypesPriv.h +1 -9
- package/cpp/skia/include/private/gpu/vk/SkiaVulkan.h +4 -0
- package/cpp/skia/include/utils/SkCamera.h +1 -1
- package/cpp/skia/include/utils/SkCustomTypeface.h +7 -1
- package/cpp/skia/include/utils/SkNWayCanvas.h +6 -6
- package/cpp/skia/include/utils/SkOrderedFontMgr.h +7 -6
- package/cpp/skia/include/utils/SkPaintFilterCanvas.h +2 -2
- package/cpp/skia/include/utils/SkParsePath.h +1 -1
- package/cpp/skia/modules/skcms/skcms.h +14 -0
- package/cpp/skia/modules/skcms/src/Transform_inl.h +19 -0
- package/cpp/skia/modules/skparagraph/include/FontCollection.h +2 -2
- package/cpp/skia/modules/skparagraph/include/Paragraph.h +72 -2
- package/cpp/skia/modules/skparagraph/include/ParagraphCache.h +1 -11
- package/cpp/skia/modules/skparagraph/include/ParagraphPainter.h +63 -0
- package/cpp/skia/modules/skparagraph/include/TextStyle.h +27 -4
- package/cpp/skia/modules/skparagraph/include/TypefaceFontProvider.h +13 -13
- package/cpp/skia/modules/skresources/include/SkResources.h +18 -4
- package/cpp/skia/modules/svg/include/SkSVGAttribute.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGAttributeParser.h +2 -2
- package/cpp/skia/modules/svg/include/SkSVGContainer.h +2 -2
- package/cpp/skia/modules/svg/include/SkSVGDOM.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGFilterContext.h +2 -2
- package/cpp/skia/modules/svg/include/SkSVGGradient.h +2 -2
- package/cpp/skia/modules/svg/include/SkSVGIDMapper.h +2 -2
- package/cpp/skia/modules/svg/include/SkSVGRenderContext.h +3 -3
- package/cpp/skia/modules/svg/include/SkSVGSVG.h +1 -1
- package/cpp/skia/modules/svg/include/SkSVGTypes.h +22 -21
- package/cpp/skia/modules/svg/include/SkSVGValue.h +1 -1
- package/cpp/skia/{include/private → src/core}/SkTHash.h +41 -37
- package/ios/RNSkia-iOS/RNSkMetalCanvasProvider.mm +1 -2
- package/ios/RNSkia-iOS/ViewScreenshotService.mm +1 -1
- package/libs/android/arm64-v8a/libskia.a +0 -0
- package/libs/android/arm64-v8a/libskottie.a +0 -0
- package/libs/android/arm64-v8a/libsksg.a +0 -0
- package/libs/android/arm64-v8a/libskshaper.a +0 -0
- package/libs/android/arm64-v8a/libsvg.a +0 -0
- package/libs/android/armeabi-v7a/libskia.a +0 -0
- package/libs/android/armeabi-v7a/libskottie.a +0 -0
- package/libs/android/armeabi-v7a/libsksg.a +0 -0
- package/libs/android/armeabi-v7a/libskshaper.a +0 -0
- package/libs/android/armeabi-v7a/libsvg.a +0 -0
- package/libs/android/x86/libskia.a +0 -0
- package/libs/android/x86/libskottie.a +0 -0
- package/libs/android/x86/libsksg.a +0 -0
- package/libs/android/x86/libskshaper.a +0 -0
- package/libs/android/x86/libsvg.a +0 -0
- package/libs/android/x86_64/libskia.a +0 -0
- package/libs/android/x86_64/libskottie.a +0 -0
- package/libs/android/x86_64/libsksg.a +0 -0
- package/libs/android/x86_64/libskshaper.a +0 -0
- package/libs/android/x86_64/libsvg.a +0 -0
- package/libs/ios/libskia.xcframework/Info.plist +5 -5
- package/libs/ios/libskia.xcframework/ios-arm64_arm64e/libskia.a +0 -0
- package/libs/ios/libskia.xcframework/ios-arm64_arm64e_x86_64-simulator/libskia.a +0 -0
- package/libs/ios/libskottie.xcframework/ios-arm64_arm64e/libskottie.a +0 -0
- package/libs/ios/libskottie.xcframework/ios-arm64_arm64e_x86_64-simulator/libskottie.a +0 -0
- package/libs/ios/libsksg.xcframework/ios-arm64_arm64e/libsksg.a +0 -0
- package/libs/ios/libsksg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsksg.a +0 -0
- package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e/libskshaper.a +0 -0
- package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e_x86_64-simulator/libskshaper.a +0 -0
- package/libs/ios/libsvg.xcframework/ios-arm64_arm64e/libsvg.a +0 -0
- package/libs/ios/libsvg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsvg.a +0 -0
- package/package.json +1 -1
- package/react-native-skia.podspec +1 -1
- package/scripts/install-npm.js +11 -1
- package/cpp/skia/include/core/SkImageEncoder.h +0 -71
- package/cpp/skia/include/gpu/GrConfig.h +0 -53
- package/cpp/skia/include/gpu/graphite/CombinationBuilder.h +0 -195
- package/cpp/skia/include/private/SkHalf.h +0 -38
- package/cpp/skia/include/private/SkImageInfoPriv.h +0 -199
- package/cpp/skia/include/private/SkSLIRNode.h +0 -64
- package/cpp/skia/include/private/SkSLLayout.h +0 -144
- package/cpp/skia/include/private/SkSLModifiers.h +0 -178
- package/cpp/skia/include/private/SkSLProgramElement.h +0 -77
- package/cpp/skia/include/private/SkSLProgramKind.h +0 -35
- package/cpp/skia/include/private/SkSLStatement.h +0 -86
- package/cpp/skia/include/private/SkSLString.h +0 -41
- package/cpp/skia/include/private/SkSLSymbol.h +0 -94
- package/cpp/skia/include/private/SkSafe_math.h +0 -52
- package/cpp/skia/include/private/SkStringView.h +0 -51
- package/cpp/skia/include/private/SkTArray.h +0 -655
- package/cpp/skia/include/private/SkUniquePaintParamsID.h +0 -35
- package/cpp/skia/include/private/SkVx.h +0 -1026
- package/cpp/skia/include/sksl/DSL.h +0 -37
- package/cpp/skia/include/sksl/DSLBlock.h +0 -58
- package/cpp/skia/include/sksl/DSLCase.h +0 -62
- package/cpp/skia/include/sksl/DSLCore.h +0 -492
- package/cpp/skia/include/sksl/DSLExpression.h +0 -241
- package/cpp/skia/include/sksl/DSLFunction.h +0 -113
- package/cpp/skia/include/sksl/DSLLayout.h +0 -92
- package/cpp/skia/include/sksl/DSLModifiers.h +0 -69
- package/cpp/skia/include/sksl/DSLStatement.h +0 -82
- package/cpp/skia/include/sksl/DSLSymbols.h +0 -61
- package/cpp/skia/include/sksl/DSLType.h +0 -271
- package/cpp/skia/include/sksl/DSLVar.h +0 -231
- package/cpp/skia/include/sksl/SkSLErrorReporter.h +0 -65
- package/cpp/skia/include/sksl/SkSLOperator.h +0 -154
- package/cpp/skia/include/sksl/SkSLPosition.h +0 -104
- package/cpp/skia/include/utils/SkRandom.h +0 -169
- package/cpp/skia/src/core/SkLRUCache.h +0 -126
- package/cpp/skia/src/core/SkTInternalLList.h +0 -302
- /package/cpp/skia/include/{core → codec}/SkPngChunkReader.h +0 -0
- /package/cpp/skia/include/private/{SkTPin.h → base/SkTPin.h} +0 -0
- /package/cpp/skia/include/private/{SkThreadAnnotations.h → base/SkThreadAnnotations.h} +0 -0
@@ -8,21 +8,18 @@
|
|
8
8
|
#ifndef SkTDArray_DEFINED
|
9
9
|
#define SkTDArray_DEFINED
|
10
10
|
|
11
|
-
#include "include/
|
12
|
-
#include "include/private/
|
13
|
-
#include "include/private/SkTo.h"
|
11
|
+
#include "include/private/base/SkAPI.h"
|
12
|
+
#include "include/private/base/SkAssert.h"
|
13
|
+
#include "include/private/base/SkTo.h"
|
14
14
|
|
15
15
|
#include <algorithm>
|
16
16
|
#include <cstddef>
|
17
|
-
#include <climits>
|
18
17
|
#include <initializer_list>
|
19
|
-
#include <tuple>
|
20
|
-
#include <utility>
|
21
18
|
|
22
19
|
class SK_SPI SkTDStorage {
|
23
20
|
public:
|
24
21
|
explicit SkTDStorage(int sizeOfT);
|
25
|
-
SkTDStorage(const void* src, int
|
22
|
+
SkTDStorage(const void* src, int size, int sizeOfT);
|
26
23
|
|
27
24
|
// Copy
|
28
25
|
SkTDStorage(const SkTDStorage& that);
|
@@ -38,15 +35,15 @@ public:
|
|
38
35
|
void swap(SkTDStorage& that);
|
39
36
|
|
40
37
|
// Size routines
|
41
|
-
bool empty() const { return
|
42
|
-
void clear() {
|
43
|
-
int size() const { return
|
44
|
-
void resize(int
|
45
|
-
size_t size_bytes() const { return this->bytes(
|
38
|
+
bool empty() const { return fSize == 0; }
|
39
|
+
void clear() { fSize = 0; }
|
40
|
+
int size() const { return fSize; }
|
41
|
+
void resize(int newSize);
|
42
|
+
size_t size_bytes() const { return this->bytes(fSize); }
|
46
43
|
|
47
44
|
// Capacity routines
|
48
|
-
int capacity() const { return
|
49
|
-
void reserve(int
|
45
|
+
int capacity() const { return fCapacity; }
|
46
|
+
void reserve(int newCapacity);
|
50
47
|
void shrink_to_fit();
|
51
48
|
|
52
49
|
void* data() { return fStorage; }
|
@@ -68,8 +65,8 @@ public:
|
|
68
65
|
void* insert(int index, int count, const void* src);
|
69
66
|
|
70
67
|
void pop_back() {
|
71
|
-
SkASSERT(
|
72
|
-
|
68
|
+
SkASSERT(fSize > 0);
|
69
|
+
fSize--;
|
73
70
|
}
|
74
71
|
|
75
72
|
friend bool operator==(const SkTDStorage& a, const SkTDStorage& b);
|
@@ -81,7 +78,7 @@ private:
|
|
81
78
|
size_t bytes(int n) const { return SkToSizeT(n * fSizeOfT); }
|
82
79
|
void* address(int n) { return fStorage + this->bytes(n); }
|
83
80
|
|
84
|
-
// Adds delta to
|
81
|
+
// Adds delta to fSize. Crash if outside [0, INT_MAX]
|
85
82
|
int calculateSizeOrDie(int delta);
|
86
83
|
|
87
84
|
// Move the tail of the array defined by the indexes tailStart and tailEnd to dstIndex. The
|
@@ -93,8 +90,8 @@ private:
|
|
93
90
|
|
94
91
|
const int fSizeOfT;
|
95
92
|
std::byte* fStorage{nullptr};
|
96
|
-
int
|
97
|
-
int
|
93
|
+
int fCapacity{0}; // size of the allocation in fArray (#elements)
|
94
|
+
int fSize{0}; // logical number of elements (fSize <= fCapacity)
|
98
95
|
};
|
99
96
|
|
100
97
|
static inline void swap(SkTDStorage& a, SkTDStorage& b) {
|
@@ -188,7 +185,7 @@ public:
|
|
188
185
|
fStorage.resize(count);
|
189
186
|
}
|
190
187
|
|
191
|
-
void reserve(
|
188
|
+
void reserve(int n) {
|
192
189
|
fStorage.reserve(n);
|
193
190
|
}
|
194
191
|
|
@@ -219,18 +216,6 @@ public:
|
|
219
216
|
fStorage.removeShuffle(index);
|
220
217
|
}
|
221
218
|
|
222
|
-
int find(const T& elem) const {
|
223
|
-
const T* iter = this->begin();
|
224
|
-
const T* stop = this->end();
|
225
|
-
|
226
|
-
for (; iter < stop; iter++) {
|
227
|
-
if (*iter == elem) {
|
228
|
-
return SkToInt(iter - this->begin());
|
229
|
-
}
|
230
|
-
}
|
231
|
-
return -1;
|
232
|
-
}
|
233
|
-
|
234
219
|
// routines to treat the array like a stack
|
235
220
|
void push_back(const T& v) {
|
236
221
|
this->append();
|
@@ -238,28 +223,6 @@ public:
|
|
238
223
|
}
|
239
224
|
void pop_back() { fStorage.pop_back(); }
|
240
225
|
|
241
|
-
void deleteAll() {
|
242
|
-
for (T p : *this) {
|
243
|
-
delete p;
|
244
|
-
}
|
245
|
-
this->reset();
|
246
|
-
}
|
247
|
-
|
248
|
-
void freeAll() {
|
249
|
-
for (T p : *this) {
|
250
|
-
sk_free(p);
|
251
|
-
}
|
252
|
-
|
253
|
-
this->reset();
|
254
|
-
}
|
255
|
-
|
256
|
-
void unrefAll() {
|
257
|
-
for (T p : *this) {
|
258
|
-
p->unref();
|
259
|
-
}
|
260
|
-
this->reset();
|
261
|
-
}
|
262
|
-
|
263
226
|
void shrink_to_fit() {
|
264
227
|
fStorage.shrink_to_fit();
|
265
228
|
}
|
@@ -8,8 +8,10 @@
|
|
8
8
|
#ifndef SkTFitsIn_DEFINED
|
9
9
|
#define SkTFitsIn_DEFINED
|
10
10
|
|
11
|
+
#include "include/private/base/SkDebug.h"
|
12
|
+
|
13
|
+
#include <cstdint>
|
11
14
|
#include <limits>
|
12
|
-
#include <stdint.h>
|
13
15
|
#include <type_traits>
|
14
16
|
|
15
17
|
/**
|
@@ -71,28 +73,32 @@ static constexpr inline
|
|
71
73
|
typename std::enable_if<(std::is_integral<S>::value || std::is_enum<S>::value) &&
|
72
74
|
(std::is_integral<D>::value || std::is_enum<D>::value), bool>::type
|
73
75
|
/*bool*/ SkTFitsIn(S src) {
|
76
|
+
// Ensure that is_signed and is_unsigned are passed the arithmetic underlyng types of enums.
|
77
|
+
using Sa = typename sk_strip_enum<S>::type;
|
78
|
+
using Da = typename sk_strip_enum<D>::type;
|
79
|
+
|
74
80
|
// SkTFitsIn() is used in public headers, so needs to be written targeting at most C++11.
|
75
81
|
return
|
76
82
|
|
77
83
|
// E.g. (int8_t)(uint8_t) int8_t(-1) == -1, but the uint8_t == 255, not -1.
|
78
|
-
(std::is_signed<
|
84
|
+
(std::is_signed<Sa>::value && std::is_unsigned<Da>::value && sizeof(Sa) <= sizeof(Da)) ?
|
79
85
|
(S)0 <= src :
|
80
86
|
|
81
87
|
// E.g. (uint8_t)(int8_t) uint8_t(255) == 255, but the int8_t == -1.
|
82
|
-
(std::is_signed<
|
83
|
-
src <= (S)std::numeric_limits<
|
88
|
+
(std::is_signed<Da>::value && std::is_unsigned<Sa>::value && sizeof(Da) <= sizeof(Sa)) ?
|
89
|
+
src <= (S)std::numeric_limits<Da>::max() :
|
84
90
|
|
85
91
|
#if !defined(SK_DEBUG) && !defined(__MSVC_RUNTIME_CHECKS )
|
86
92
|
// Correct (simple) version. This trips up MSVC's /RTCc run-time checking.
|
87
93
|
(S)(D)src == src;
|
88
94
|
#else
|
89
95
|
// More complex version that's safe with /RTCc. Used in all debug builds, for coverage.
|
90
|
-
(std::is_signed<
|
91
|
-
(intmax_t)src >= (intmax_t)std::numeric_limits<
|
92
|
-
(intmax_t)src <= (intmax_t)std::numeric_limits<
|
96
|
+
(std::is_signed<Sa>::value) ?
|
97
|
+
(intmax_t)src >= (intmax_t)std::numeric_limits<Da>::min() &&
|
98
|
+
(intmax_t)src <= (intmax_t)std::numeric_limits<Da>::max() :
|
93
99
|
|
94
100
|
// std::is_unsigned<S> ?
|
95
|
-
(uintmax_t)src <= (uintmax_t)std::numeric_limits<
|
101
|
+
(uintmax_t)src <= (uintmax_t)std::numeric_limits<Da>::max();
|
96
102
|
#endif
|
97
103
|
}
|
98
104
|
|
@@ -8,18 +8,21 @@
|
|
8
8
|
#ifndef SkTemplates_DEFINED
|
9
9
|
#define SkTemplates_DEFINED
|
10
10
|
|
11
|
-
#include "include/
|
12
|
-
#include "include/private/
|
13
|
-
#include "include/private/
|
11
|
+
#include "include/private/base/SkAlign.h"
|
12
|
+
#include "include/private/base/SkAssert.h"
|
13
|
+
#include "include/private/base/SkDebug.h"
|
14
|
+
#include "include/private/base/SkMalloc.h"
|
15
|
+
#include "include/private/base/SkTLogic.h"
|
14
16
|
|
15
|
-
#include <string.h>
|
16
17
|
#include <array>
|
17
18
|
#include <cstddef>
|
19
|
+
#include <cstdint>
|
20
|
+
#include <cstring>
|
18
21
|
#include <memory>
|
19
|
-
#include <new>
|
20
22
|
#include <type_traits>
|
21
23
|
#include <utility>
|
22
24
|
|
25
|
+
|
23
26
|
/** \file SkTemplates.h
|
24
27
|
|
25
28
|
This file contains light-weight template classes for type-safe and exception-safe
|
@@ -32,6 +35,17 @@
|
|
32
35
|
*/
|
33
36
|
template<typename T> inline void sk_ignore_unused_variable(const T&) { }
|
34
37
|
|
38
|
+
/**
|
39
|
+
* This is a general purpose absolute-value function.
|
40
|
+
* See SkAbs32 in (SkSafe32.h) for a 32-bit int specific version that asserts.
|
41
|
+
*/
|
42
|
+
template <typename T> static inline T SkTAbs(T value) {
|
43
|
+
if (value < 0) {
|
44
|
+
value = -value;
|
45
|
+
}
|
46
|
+
return value;
|
47
|
+
}
|
48
|
+
|
35
49
|
/**
|
36
50
|
* Returns a pointer to a D which comes immediately after S[count].
|
37
51
|
*/
|
@@ -48,14 +62,16 @@ template <typename D, typename S> inline D* SkTAddOffset(S* ptr, ptrdiff_t byteO
|
|
48
62
|
return reinterpret_cast<D*>(reinterpret_cast<sknonstd::same_cv_t<char, D>*>(ptr) + byteOffset);
|
49
63
|
}
|
50
64
|
|
51
|
-
|
52
|
-
template <typename T, T* P> struct SkFunctionWrapper {
|
65
|
+
template <typename T, T* P> struct SkOverloadedFunctionObject {
|
53
66
|
template <typename... Args>
|
54
67
|
auto operator()(Args&&... args) const -> decltype(P(std::forward<Args>(args)...)) {
|
55
68
|
return P(std::forward<Args>(args)...);
|
56
69
|
}
|
57
70
|
};
|
58
71
|
|
72
|
+
template <auto F> using SkFunctionObject =
|
73
|
+
SkOverloadedFunctionObject<std::remove_pointer_t<decltype(F)>, F>;
|
74
|
+
|
59
75
|
/** \class SkAutoTCallVProc
|
60
76
|
|
61
77
|
Call a function when this goes out of scope. The template uses two
|
@@ -65,8 +81,8 @@ template <typename T, T* P> struct SkFunctionWrapper {
|
|
65
81
|
function.
|
66
82
|
*/
|
67
83
|
template <typename T, void (*P)(T*)> class SkAutoTCallVProc
|
68
|
-
: public std::unique_ptr<T,
|
69
|
-
using inherited = std::unique_ptr<T,
|
84
|
+
: public std::unique_ptr<T, SkFunctionObject<P>> {
|
85
|
+
using inherited = std::unique_ptr<T, SkFunctionObject<P>>;
|
70
86
|
public:
|
71
87
|
using inherited::inherited;
|
72
88
|
SkAutoTCallVProc(const SkAutoTCallVProc&) = delete;
|
@@ -75,14 +91,16 @@ public:
|
|
75
91
|
operator T*() const { return this->get(); }
|
76
92
|
};
|
77
93
|
|
94
|
+
|
95
|
+
namespace skia_private {
|
78
96
|
/** Allocate an array of T elements, and free the array in the destructor
|
79
97
|
*/
|
80
|
-
template <typename T> class
|
98
|
+
template <typename T> class AutoTArray {
|
81
99
|
public:
|
82
|
-
|
100
|
+
AutoTArray() {}
|
83
101
|
/** Allocate count number of T elements
|
84
102
|
*/
|
85
|
-
explicit
|
103
|
+
explicit AutoTArray(int count) {
|
86
104
|
SkASSERT(count >= 0);
|
87
105
|
if (count) {
|
88
106
|
fArray.reset(new T[count]);
|
@@ -90,10 +108,10 @@ public:
|
|
90
108
|
SkDEBUGCODE(fCount = count;)
|
91
109
|
}
|
92
110
|
|
93
|
-
|
111
|
+
AutoTArray(AutoTArray&& other) : fArray(std::move(other.fArray)) {
|
94
112
|
SkDEBUGCODE(fCount = other.fCount; other.fCount = 0;)
|
95
113
|
}
|
96
|
-
|
114
|
+
AutoTArray& operator=(AutoTArray&& other) {
|
97
115
|
if (this != &other) {
|
98
116
|
fArray = std::move(other.fArray);
|
99
117
|
SkDEBUGCODE(fCount = other.fCount; other.fCount = 0;)
|
@@ -103,7 +121,7 @@ public:
|
|
103
121
|
|
104
122
|
/** Reallocates given a new count. Reallocation occurs even if new count equals old count.
|
105
123
|
*/
|
106
|
-
void reset(int count = 0) { *this =
|
124
|
+
void reset(int count = 0) { *this = AutoTArray(count); }
|
107
125
|
|
108
126
|
/** Return the array of T elements. Will be NULL if count == 0
|
109
127
|
*/
|
@@ -125,30 +143,30 @@ private:
|
|
125
143
|
SkDEBUGCODE(int fCount = 0;)
|
126
144
|
};
|
127
145
|
|
128
|
-
/** Wraps
|
146
|
+
/** Wraps AutoTArray, with room for kCountRequested elements preallocated.
|
129
147
|
*/
|
130
|
-
template <int kCountRequested, typename T> class
|
148
|
+
template <int kCountRequested, typename T> class AutoSTArray {
|
131
149
|
public:
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
150
|
+
AutoSTArray(AutoSTArray&&) = delete;
|
151
|
+
AutoSTArray(const AutoSTArray&) = delete;
|
152
|
+
AutoSTArray& operator=(AutoSTArray&&) = delete;
|
153
|
+
AutoSTArray& operator=(const AutoSTArray&) = delete;
|
136
154
|
|
137
155
|
/** Initialize with no objects */
|
138
|
-
|
156
|
+
AutoSTArray() {
|
139
157
|
fArray = nullptr;
|
140
158
|
fCount = 0;
|
141
159
|
}
|
142
160
|
|
143
161
|
/** Allocate count number of T elements
|
144
162
|
*/
|
145
|
-
|
163
|
+
AutoSTArray(int count) {
|
146
164
|
fArray = nullptr;
|
147
165
|
fCount = 0;
|
148
166
|
this->reset(count);
|
149
167
|
}
|
150
168
|
|
151
|
-
~
|
169
|
+
~AutoSTArray() {
|
152
170
|
this->reset(0);
|
153
171
|
}
|
154
172
|
|
@@ -216,8 +234,8 @@ public:
|
|
216
234
|
|
217
235
|
private:
|
218
236
|
#if defined(SK_BUILD_FOR_GOOGLE3)
|
219
|
-
// Stack frame size is limited for SK_BUILD_FOR_GOOGLE3. 4k is less than the actual max,
|
220
|
-
// have multiple large stack allocations.
|
237
|
+
// Stack frame size is limited for SK_BUILD_FOR_GOOGLE3. 4k is less than the actual max,
|
238
|
+
// but some functions have multiple large stack allocations.
|
221
239
|
static const int kMaxBytes = 4 * 1024;
|
222
240
|
static const int kCount = kCountRequested * sizeof(T) > kMaxBytes
|
223
241
|
? kMaxBytes / sizeof(T)
|
@@ -226,10 +244,9 @@ private:
|
|
226
244
|
static const int kCount = kCountRequested;
|
227
245
|
#endif
|
228
246
|
|
229
|
-
int
|
230
|
-
T*
|
231
|
-
|
232
|
-
char fStorage[kCount * sizeof(T)];
|
247
|
+
int fCount;
|
248
|
+
T* fArray;
|
249
|
+
alignas(T) char fStorage[kCount * sizeof(T)];
|
233
250
|
};
|
234
251
|
|
235
252
|
/** Manages an array of T elements, freeing the array in the destructor.
|
@@ -238,17 +255,17 @@ private:
|
|
238
255
|
template <typename T,
|
239
256
|
typename = std::enable_if_t<std::is_trivially_default_constructible<T>::value &&
|
240
257
|
std::is_trivially_destructible<T>::value>>
|
241
|
-
class
|
258
|
+
class AutoTMalloc {
|
242
259
|
public:
|
243
260
|
/** Takes ownership of the ptr. The ptr must be a value which can be passed to sk_free. */
|
244
|
-
explicit
|
261
|
+
explicit AutoTMalloc(T* ptr = nullptr) : fPtr(ptr) {}
|
245
262
|
|
246
263
|
/** Allocates space for 'count' Ts. */
|
247
|
-
explicit
|
264
|
+
explicit AutoTMalloc(size_t count)
|
248
265
|
: fPtr(count ? (T*)sk_malloc_throw(count, sizeof(T)) : nullptr) {}
|
249
266
|
|
250
|
-
|
251
|
-
|
267
|
+
AutoTMalloc(AutoTMalloc&&) = default;
|
268
|
+
AutoTMalloc& operator=(AutoTMalloc&&) = default;
|
252
269
|
|
253
270
|
/** Resize the memory area pointed to by the current ptr preserving contents. */
|
254
271
|
void realloc(size_t count) {
|
@@ -283,18 +300,18 @@ public:
|
|
283
300
|
T* release() { return fPtr.release(); }
|
284
301
|
|
285
302
|
private:
|
286
|
-
std::unique_ptr<T,
|
303
|
+
std::unique_ptr<T, SkOverloadedFunctionObject<void(void*), sk_free>> fPtr;
|
287
304
|
};
|
288
305
|
|
289
306
|
template <size_t kCountRequested,
|
290
307
|
typename T,
|
291
308
|
typename = std::enable_if_t<std::is_trivially_default_constructible<T>::value &&
|
292
309
|
std::is_trivially_destructible<T>::value>>
|
293
|
-
class
|
310
|
+
class AutoSTMalloc {
|
294
311
|
public:
|
295
|
-
|
312
|
+
AutoSTMalloc() : fPtr(fTStorage) {}
|
296
313
|
|
297
|
-
|
314
|
+
AutoSTMalloc(size_t count) {
|
298
315
|
if (count > kCount) {
|
299
316
|
fPtr = (T*)sk_malloc_throw(count, sizeof(T));
|
300
317
|
} else if (count) {
|
@@ -304,12 +321,12 @@ public:
|
|
304
321
|
}
|
305
322
|
}
|
306
323
|
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
324
|
+
AutoSTMalloc(AutoSTMalloc&&) = delete;
|
325
|
+
AutoSTMalloc(const AutoSTMalloc&) = delete;
|
326
|
+
AutoSTMalloc& operator=(AutoSTMalloc&&) = delete;
|
327
|
+
AutoSTMalloc& operator=(const AutoSTMalloc&) = delete;
|
311
328
|
|
312
|
-
~
|
329
|
+
~AutoSTMalloc() {
|
313
330
|
if (fPtr != fTStorage) {
|
314
331
|
sk_free(fPtr);
|
315
332
|
}
|
@@ -391,27 +408,9 @@ private:
|
|
391
408
|
};
|
392
409
|
};
|
393
410
|
|
394
|
-
|
411
|
+
using UniqueVoidPtr = std::unique_ptr<void, SkOverloadedFunctionObject<void(void*), sk_free>>;
|
395
412
|
|
396
|
-
|
397
|
-
public:
|
398
|
-
SkAlignedSTStorage() {}
|
399
|
-
SkAlignedSTStorage(SkAlignedSTStorage&&) = delete;
|
400
|
-
SkAlignedSTStorage(const SkAlignedSTStorage&) = delete;
|
401
|
-
SkAlignedSTStorage& operator=(SkAlignedSTStorage&&) = delete;
|
402
|
-
SkAlignedSTStorage& operator=(const SkAlignedSTStorage&) = delete;
|
403
|
-
|
404
|
-
/**
|
405
|
-
* Returns void* because this object does not initialize the
|
406
|
-
* memory. Use placement new for types that require a constructor.
|
407
|
-
*/
|
408
|
-
void* get() { return fStorage; }
|
409
|
-
const void* get() const { return fStorage; }
|
410
|
-
private:
|
411
|
-
alignas(T) char fStorage[sizeof(T)*N];
|
412
|
-
};
|
413
|
-
|
414
|
-
using SkAutoFree = std::unique_ptr<void, SkFunctionWrapper<void(void*), sk_free>>;
|
413
|
+
} // namespace skia_private
|
415
414
|
|
416
415
|
template<typename C, std::size_t... Is>
|
417
416
|
constexpr auto SkMakeArrayFromIndexSequence(C c, std::index_sequence<Is...> is)
|
@@ -424,28 +423,4 @@ template<size_t N, typename C> constexpr auto SkMakeArray(C c)
|
|
424
423
|
return SkMakeArrayFromIndexSequence(c, std::make_index_sequence<N>{});
|
425
424
|
}
|
426
425
|
|
427
|
-
/**
|
428
|
-
* Trait for identifying types which are relocatable via memcpy, for container optimizations.
|
429
|
-
*
|
430
|
-
*/
|
431
|
-
template<typename, typename = void>
|
432
|
-
struct sk_has_trivially_relocatable_member : std::false_type {};
|
433
|
-
|
434
|
-
// Types can declare themselves trivially relocatable with a public
|
435
|
-
// using sk_is_trivially_relocatable = std::true_type;
|
436
|
-
template<typename T>
|
437
|
-
struct sk_has_trivially_relocatable_member<T, std::void_t<typename T::sk_is_trivially_relocatable>>
|
438
|
-
: T::sk_is_trivially_relocatable {};
|
439
|
-
|
440
|
-
// By default, all trivially copyable types are trivially relocatable.
|
441
|
-
template <typename T>
|
442
|
-
struct sk_is_trivially_relocatable
|
443
|
-
: std::disjunction<std::is_trivially_copyable<T>, sk_has_trivially_relocatable_member<T>
|
444
|
-
>{};
|
445
|
-
|
446
|
-
// Here be some dragons: while technically not guaranteed, we count on all sane unique_ptr
|
447
|
-
// implementations to be trivially relocatable.
|
448
|
-
template <typename T>
|
449
|
-
struct sk_is_trivially_relocatable<std::unique_ptr<T>> : std::true_type {};
|
450
|
-
|
451
426
|
#endif
|
@@ -8,11 +8,14 @@
|
|
8
8
|
#ifndef SkThreadID_DEFINED
|
9
9
|
#define SkThreadID_DEFINED
|
10
10
|
|
11
|
-
#include "include/
|
11
|
+
#include "include/private/base/SkAPI.h"
|
12
|
+
#include "include/private/base/SkDebug.h"
|
13
|
+
|
14
|
+
#include <cstdint>
|
12
15
|
|
13
16
|
typedef int64_t SkThreadID;
|
14
17
|
|
15
|
-
// SkMutex.h uses
|
18
|
+
// SkMutex.h uses SkGetThreadID in debug only code.
|
16
19
|
SkDEBUGCODE(SK_SPI) SkThreadID SkGetThreadID();
|
17
20
|
|
18
21
|
const SkThreadID kIllegalThreadID = 0;
|
@@ -7,8 +7,11 @@
|
|
7
7
|
#ifndef SkTo_DEFINED
|
8
8
|
#define SkTo_DEFINED
|
9
9
|
|
10
|
-
#include "include/
|
11
|
-
#include "include/private/SkTFitsIn.h"
|
10
|
+
#include "include/private/base/SkAssert.h"
|
11
|
+
#include "include/private/base/SkTFitsIn.h"
|
12
|
+
|
13
|
+
#include <cstddef>
|
14
|
+
#include <cstdint>
|
12
15
|
|
13
16
|
template <typename D, typename S> constexpr D SkTo(S s) {
|
14
17
|
return SkASSERT(SkTFitsIn<D>(s)),
|
@@ -21,8 +24,16 @@ template <typename S> constexpr int16_t SkToS16(S x) { return SkTo<int16_t>(x
|
|
21
24
|
template <typename S> constexpr uint16_t SkToU16(S x) { return SkTo<uint16_t>(x); }
|
22
25
|
template <typename S> constexpr int32_t SkToS32(S x) { return SkTo<int32_t>(x); }
|
23
26
|
template <typename S> constexpr uint32_t SkToU32(S x) { return SkTo<uint32_t>(x); }
|
27
|
+
template <typename S> constexpr int64_t SkToS64(S x) { return SkTo<int64_t>(x); }
|
28
|
+
template <typename S> constexpr uint64_t SkToU64(S x) { return SkTo<uint64_t>(x); }
|
24
29
|
template <typename S> constexpr int SkToInt(S x) { return SkTo<int>(x); }
|
25
30
|
template <typename S> constexpr unsigned SkToUInt(S x) { return SkTo<unsigned>(x); }
|
26
31
|
template <typename S> constexpr size_t SkToSizeT(S x) { return SkTo<size_t>(x); }
|
27
32
|
|
33
|
+
/** @return false or true based on the condition
|
34
|
+
*/
|
35
|
+
template <typename T> static constexpr bool SkToBool(const T& x) {
|
36
|
+
return (bool)x;
|
37
|
+
}
|
38
|
+
|
28
39
|
#endif // SkTo_DEFINED
|
@@ -0,0 +1,33 @@
|
|
1
|
+
// Copyright 2022 Google LLC
|
2
|
+
// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.
|
3
|
+
|
4
|
+
#ifndef SkTypeTraits_DEFINED
|
5
|
+
#define SkTypeTraits_DEFINED
|
6
|
+
|
7
|
+
#include <memory>
|
8
|
+
#include <type_traits>
|
9
|
+
|
10
|
+
// Trait for identifying types which are relocatable via memcpy, for container optimizations.
|
11
|
+
template<typename, typename = void>
|
12
|
+
struct sk_has_trivially_relocatable_member : std::false_type {};
|
13
|
+
|
14
|
+
// Types can declare themselves trivially relocatable with a public
|
15
|
+
// using sk_is_trivially_relocatable = std::true_type;
|
16
|
+
template<typename T>
|
17
|
+
struct sk_has_trivially_relocatable_member<T, std::void_t<typename T::sk_is_trivially_relocatable>>
|
18
|
+
: T::sk_is_trivially_relocatable {};
|
19
|
+
|
20
|
+
// By default, all trivially copyable types are trivially relocatable.
|
21
|
+
template <typename T>
|
22
|
+
struct sk_is_trivially_relocatable
|
23
|
+
: std::disjunction<std::is_trivially_copyable<T>, sk_has_trivially_relocatable_member<T>>{};
|
24
|
+
|
25
|
+
// Here be some dragons: while technically not guaranteed, we count on all sane unique_ptr
|
26
|
+
// implementations to be trivially relocatable.
|
27
|
+
template <typename T>
|
28
|
+
struct sk_is_trivially_relocatable<std::unique_ptr<T>> : std::true_type {};
|
29
|
+
|
30
|
+
template <typename T>
|
31
|
+
inline constexpr bool sk_is_trivially_relocatable_v = sk_is_trivially_relocatable<T>::value;
|
32
|
+
|
33
|
+
#endif // SkTypeTraits_DEFINED
|