aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/jumper/SkJumper_misc.h
diff options
context:
space:
mode:
authorGravatar Mike Klein <mtklein@chromium.org>2017-09-15 14:02:08 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-09-15 18:25:34 +0000
commit7c55726156a6b2bda10035188be0077848bd3ede (patch)
tree3944c8628aedd7181637c64d384fc98a09277028 /src/jumper/SkJumper_misc.h
parentcb4d58766668b003fea67798027fc25d84acd059 (diff)
centralize SI, Ctx, and load_and_inc()
We've got independent definitions of SI, LazyCtx/Ctx, and load_and_inc() in _stages.cpp and _lowp.cpp. It's a good time to centralize them, taking _stages.cpp's SI and load_and_inc(), and _lowp's Ctx. SI and load_and_inc() are uninterestingly different. But using _lowp's Ctx will let us get its prettier typed stage definitions into _stages.cpp, but that is not not done here. This is a pure refactor with no generated code changes. Change-Id: I53260b0fdc71a77bf9e3ed6f3df3a2a4cbd2392b Reviewed-on: https://skia-review.googlesource.com/47181 Reviewed-by: Mike Klein <mtklein@chromium.org> Commit-Queue: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'src/jumper/SkJumper_misc.h')
-rw-r--r--src/jumper/SkJumper_misc.h10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/jumper/SkJumper_misc.h b/src/jumper/SkJumper_misc.h
index 09758fba7d..8f7ebb56ac 100644
--- a/src/jumper/SkJumper_misc.h
+++ b/src/jumper/SkJumper_misc.h
@@ -63,19 +63,21 @@ SI void* load_and_inc(void**& program) {
#endif
}
-// LazyCtx doesn't do anything unless you call operator T*(), encapsulating the logic
-// from above that stages without a context pointer are represented by just 1 void*.
-struct LazyCtx {
+// Lazily resolved on first cast. Does nothing if cast to Ctx::None.
+struct Ctx {
+ using None = decltype(nullptr);
+
void* ptr;
void**& program;
- explicit LazyCtx(void**& p) : ptr(nullptr), program(p) {}
+ explicit Ctx(void**& p) : ptr(nullptr), program(p) {}
template <typename T>
operator T*() {
if (!ptr) { ptr = load_and_inc(program); }
return (T*)ptr;
}
+ operator None() { return nullptr; }
};
#endif//SkJumper_misc_DEFINED