blob: 570a717e92a0663aab4abbb04ad061e2161e69c9 [file] [log] [blame]
#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