| Index: src/record/SkRecordTraits.h
|
| diff --git a/src/record/SkRecordTraits.h b/src/record/SkRecordTraits.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..570a717e92a0663aab4abbb04ad061e2161e69c9
|
| --- /dev/null
|
| +++ b/src/record/SkRecordTraits.h
|
| @@ -0,0 +1,31 @@
|
| +#include "SkRecords.h"
|
| +#include "SkTLogic.h"
|
| +
|
| +// Type traits that are useful for working with SkRecords.
|
| +
|
| +namespace SkRecords {
|
| +
|
| +namespace {
|
| +
|
| +// Abstracts away whether the T is optional or not.
|
| +template <typename T> const T* as_ptr(const SkRecords::Optional<T>& x) { return x; }
|
| +template <typename T> const T* as_ptr(const T& x) { return &x; }
|
| +
|
| +} // namespace
|
| +
|
| +// Gets the paint from any command that may have one.
|
| +template <typename Command> const SkPaint* GetPaint(const Command& x) { return as_ptr(x.paint); }
|
| +
|
| +// Have a paint? You are a draw command!
|
| +template <typename Command> struct IsDraw {
|
| + SK_CREATE_MEMBER_DETECTOR(paint);
|
| + static const bool value = HasMember_paint<Command>::value;
|
| +};
|
| +
|
| +// Have a clip op? You are a clip command.
|
| +template <typename Command> struct IsClip {
|
| + SK_CREATE_MEMBER_DETECTOR(op);
|
| + static const bool value = HasMember_op<Command>::value;
|
| +};
|
| +
|
| +} // namespace SkRecords
|
|
|