Skip to content

Instantly share code, notes, and snippets.

@HalCanary
Last active January 25, 2016 21:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save HalCanary/104983bb370c2216fbba to your computer and use it in GitHub Desktop.
Save HalCanary/104983bb370c2216fbba to your computer and use it in GitHub Desktop.
/*
* Copyright 2016 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef SkValues_DEFINED
#define SkValues_DEFINED
#define SK_TAGGED_UNION_U_1(X) X* f##X;
#define SK_TAGGED_UNION_U_2(X, ...) X* f##X; SK_TAGGED_UNION_U_1(__VA_ARGS__)
#define SK_TAGGED_UNION_U_3(X, ...) X* f##X; SK_TAGGED_UNION_U_2(__VA_ARGS__)
#define SK_TAGGED_UNION_U_4(X, ...) X* f##X; SK_TAGGED_UNION_U_3(__VA_ARGS__)
#define SK_TAGGED_UNION_U_5(X, ...) X* f##X; SK_TAGGED_UNION_U_4(__VA_ARGS__)
#define SK_TAGGED_UNION_U_6(X, ...) X* f##X; SK_TAGGED_UNION_U_5(__VA_ARGS__)
#define SK_TAGGED_UNION_U_7(X, ...) X* f##X; SK_TAGGED_UNION_U_6(__VA_ARGS__)
#define SK_TAGGED_UNION_U_8(X, ...) X* f##X; SK_TAGGED_UNION_U_7(__VA_ARGS__)
#define SK_TAGGED_UNION_U_9(X, ...) X* f##X; SK_TAGGED_UNION_U_8(__VA_ARGS__)
#define SK_TAGGED_UNION_U_10(X, ...) X* f##X; SK_TAGGED_UNION_U_9(__VA_ARGS__)
#define SK_TAGGED_UNION_U_11(X, ...) X* f##X; SK_TAGGED_UNION_U_10(__VA_ARGS__)
#define SK_TAGGED_UNION_U_12(X, ...) X* f##X; SK_TAGGED_UNION_U_11(__VA_ARGS__)
#define SK_TAGGED_UNION_U_13(X, ...) X* f##X; SK_TAGGED_UNION_U_12(__VA_ARGS__)
#define SK_TAGGED_UNION_U_14(X, ...) X* f##X; SK_TAGGED_UNION_U_13(__VA_ARGS__)
#define SK_TAGGED_UNION_U_15(X, ...) X* f##X; SK_TAGGED_UNION_U_14(__VA_ARGS__)
#define SK_TAGGED_UNION_U_16(X, ...) X* f##X; SK_TAGGED_UNION_U_15(__VA_ARGS__)
#define SK_TAGGED_UNION_U_17(X, ...) X* f##X; SK_TAGGED_UNION_U_16(__VA_ARGS__)
#define SK_TAGGED_UNION_U_18(X, ...) X* f##X; SK_TAGGED_UNION_U_17(__VA_ARGS__)
#define SK_TAGGED_UNION_CAT0(x, y) x ## y
#define SK_TAGGED_UNION_CAT(x, y) SK_TAGGED_UNION_CAT0(x, y)
#define SK_TAGGED_UNION_NARGS_SEQ(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,N,...) N
#define SK_TAGGED_UNION_NARGS(...) \
SK_TAGGED_UNION_NARGS_SEQ(__VA_ARGS__,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1)
#define SK_TAGGED_UNION_MAKE_PTRS(...) SK_TAGGED_UNION_CAT(SK_TAGGED_UNION_U_, SK_TAGGED_UNION_NARGS(__VA_ARGS__))(__VA_ARGS__)
#define SK_TAGGED_UNION(STRUCT_NAME, ...) \
struct STRUCT_NAME { \
enum class Type { __VA_ARGS__ }; \
Type fType; \
union { SK_TAGGED_UNION_MAKE_PTRS(__VA_ARGS__) }; \
};
namespace SkValue {
struct SrcOverXfermode_v1 {};
struct ArithmeticXfermode_v1 {};
struct LerpXfermode_v1 {};
struct PixelXorXfermode_v1 {};
struct ProcCoeffXfermode_v1 {};
SK_TAGGED_UNION(
Xfermode_v1,
SrcOverXfermode_v1,
ArithmeticXfermode_v1,
LerpXfermode_v1,
PixelXorXfermode_v1,
ProcCoeffXfermode_v1)
/*
struct Xfermode_v1 {
enum class Type {
SrcOverXfermode_v1,
ArithmeticXfermode_v1,
LerpXfermode_v1,
PixelXorXfermode_v1,
ProcCoeffXfermode_v1
};
Type fType;
union {
SrcOverXfermode_v1* fSrcOverXfermode_v1;
ArithmeticXfermode_v1* fArithmeticXfermode_v1;
LerpXfermode_v1* fLerpXfermode_v1;
PixelXorXfermode_v1* fPixelXorXfermode_v1;
ProcCoeffXfermode_v1* fProcCoeffXfermode_v1;
};
};
*/
struct BitmapProcShader_v1 {};
struct ThreeDeeShader_v1 {};
struct ColorFilterShader_v1 {};
struct ComposeShader_v1 {};
struct LightingShader_v1 {};
struct LightingShader_Light_v1 {};
struct LocalMatrixShader_v1 {};
struct PictureShader_v1 {};
struct ColorShader_v1 {};
struct PerlinNoiseShader_v1 {};
struct LinearGradientShader_v1 {};
struct RadialGradientShader_v1 {};
struct SweepGradientShader_v1 {};
struct TwoPointConicalGradientShader_v1 {};
struct ImageShader_v1 {};
SK_TAGGED_UNION(
Shader_v1,
BitmapProcShader_v1,
ThreeDeeShader_v1,
ColorFilterShader_v1,
ComposeShader_v1,
LightingShader_v1,
LightingShader_Light_v1,
LocalMatrixShader_v1,
PictureShader_v1,
ColorShader_v1,
PerlinNoiseShader_v1,
LinearGradientShader_v1,
RadialGradientShader_v1,
SweepGradientShader_v1,
TwoPointConicalGradientShader_v1,
ImageShader_v1)
/*
struct Shader_v1 {
enum class Type {
BitmapProcShader_v1,
ThreeDeeShader_v1,
ColorFilterShader_v1,
ComposeShader_v1,
LightingShader_v1,
LightingShader_Light_v1,
LocalMatrixShader_v1,
PictureShader_v1,
ColorShader_v1,
PerlinNoiseShader_v1,
LinearGradientShader_v1,
RadialGradientShader_v1,
SweepGradientShader_v1,
TwoPointConicalGradientShader_v1,
ImageShader_v1
};
Type fType;
union {
BitmapProcShader_v1* fBitmapProcShader_v1;
ThreeDeeShader_v1* fThreeDeeShader_v1;
ColorFilterShader_v1* fColorFilterShader_v1;
ComposeShader_v1* fComposeShader_v1;
LightingShader_v1* fLightingShader_v1;
LightingShader_Light_v1* fLightingShader_Light_v1;
LocalMatrixShader_v1* fLocalMatrixShader_v1;
PictureShader_v1* fPictureShader_v1;
ColorShader_v1* fColorShader_v1;
PerlinNoiseShader_v1* fPerlinNoiseShader_v1;
LinearGradientShader_v1* fLinearGradientShader_v1;
RadialGradientShader_v1* fRadialGradientShader_v1;
SweepGradientShader_v1* fSweepGradientShader_v1;
TwoPointConicalGradientShader_v1* fTwoPointConicalGradientShader_v1;
ImageShader_v1* fImageShader_v1;
};
};
*/
} // namespace
#undef SK_TAGGED_UNION_U_1
#undef SK_TAGGED_UNION_U_2
#undef SK_TAGGED_UNION_U_3
#undef SK_TAGGED_UNION_U_4
#undef SK_TAGGED_UNION_U_5
#undef SK_TAGGED_UNION_U_6
#undef SK_TAGGED_UNION_U_7
#undef SK_TAGGED_UNION_U_8
#undef SK_TAGGED_UNION_U_9
#undef SK_TAGGED_UNION_U_10
#undef SK_TAGGED_UNION_U_11
#undef SK_TAGGED_UNION_U_12
#undef SK_TAGGED_UNION_U_13
#undef SK_TAGGED_UNION_U_14
#undef SK_TAGGED_UNION_U_15
#undef SK_TAGGED_UNION_U_16
#undef SK_TAGGED_UNION_U_17
#undef SK_TAGGED_UNION_U_18
#undef SK_TAGGED_UNION_CAT0
#undef SK_TAGGED_UNION_CAT
#undef SK_TAGGED_UNION_NARGS_SEQ
#undef SK_TAGGED_UNION_NARGS
#undef SK_TAGGED_UNION_MAKE_PTRS
#undef SK_TAGGED_UNION
#endif // SkValues_DEFINED
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment