Index: gm/gm_error.h |
=================================================================== |
--- gm/gm_error.h (revision 0) |
+++ gm/gm_error.h (revision 0) |
@@ -0,0 +1,89 @@ |
+/* |
+ * Copyright 2013 Google Inc. |
+ * |
+ * Use of this source code is governed by a BSD-style license that can be |
+ * found in the LICENSE file. |
+ */ |
+ |
+/* |
+ * Error codes used by gmmain.cpp. |
+ */ |
+ |
+namespace skiagm { |
+ |
+ /** |
+ * The complete list of error types we might encounter in GM. |
+ */ |
+ enum ErrorType { |
+#if SK_SUPPORT_GPU |
+ kNoGpuContext_ErrorType, |
+#endif |
+ kImageMismatch_ErrorType, |
+ kMissingExpectations_ErrorType, |
+ kWritingReferenceImage_ErrorType, |
+ kLast_ErrorType = kWritingReferenceImage_ErrorType |
+ }; |
+ |
+ /** |
+ * A combination of 0 or more ErrorTypes. |
+ */ |
+ class ErrorCombination { |
+ public: |
+ ErrorCombination() : fBitfield(0) {} |
+ ErrorCombination(const ErrorType type) : fBitfield(1 << type) {} |
+ |
+ /** |
+ * Returns true iff there are NO errors. |
+ */ |
+ bool isEmpty() const { |
+ return (0 == this->fBitfield); |
+ } |
+ |
+ /** |
+ * Adds this ErrorType to this ErrorCombination. |
+ */ |
+ void add(const ErrorType type) { |
+ this->fBitfield |= (1 << type); |
+ } |
+ |
+ /** |
+ * Adds all ErrorTypes in "other" to this ErrorCombination. |
+ */ |
+ void add(const ErrorCombination other) { |
+ this->fBitfield |= other.fBitfield; |
+ } |
+ |
+ /** |
+ * Returns true iff this ErrorCombination includes this ErrorType. |
+ */ |
+ bool includes(const ErrorType type) const { |
+ return !(0 == (this->fBitfield & (1 << type))); |
+ } |
+ |
+ /** |
+ * Returns a new ErrorCombination, which includes the union of all |
+ * ErrorTypes in two ErrorCombination objects (this and other). |
+ */ |
+ ErrorCombination plus(const ErrorCombination& other) const { |
+ ErrorCombination retval; |
+ retval.fBitfield = this->fBitfield | other.fBitfield; |
+ return retval; |
+ } |
+ |
+ /** |
+ * Returns a new ErrorCombination, which is a copy of "this" |
+ * but with all ErrorTypes in "other" removed. |
+ */ |
+ ErrorCombination minus(const ErrorCombination& other) const { |
+ ErrorCombination retval; |
+ retval.fBitfield = this->fBitfield & ~(other.fBitfield); |
+ return retval; |
+ } |
+ |
+ private: |
+ int fBitfield; |
+ }; |
+ |
+ // No errors at all. |
+ const static ErrorCombination kEmpty_ErrorCombination; |
+} |