summaryrefslogtreecommitdiff
path: root/includes/image_io/xml/xml_action.h
diff options
context:
space:
mode:
Diffstat (limited to 'includes/image_io/xml/xml_action.h')
-rw-r--r--includes/image_io/xml/xml_action.h57
1 files changed, 57 insertions, 0 deletions
diff --git a/includes/image_io/xml/xml_action.h b/includes/image_io/xml/xml_action.h
new file mode 100644
index 0000000..dce6c7d
--- /dev/null
+++ b/includes/image_io/xml/xml_action.h
@@ -0,0 +1,57 @@
+#ifndef IMAGE_IO_XML_XML_ACTION_H_ // NOLINT
+#define IMAGE_IO_XML_XML_ACTION_H_ // NOLINT
+
+#include <functional>
+
+#include "image_io/base/data_match_result.h"
+#include "image_io/xml/xml_handler_context.h"
+
+namespace photos_editing_formats {
+namespace image_io {
+
+class XmlActionContext;
+class XmlTerminal;
+
+/// The definition for an action function associated with an XmlTerminal.
+/// If the action does not need to change the result of the terminal, it can
+/// simply return the value from XmlActionContext::GetResult().
+using XmlAction =
+ std::function<DataMatchResult(const XmlActionContext& context)>;
+
+/// The data context passed from an XmlTerminal to its action function.
+class XmlActionContext : public XmlHandlerContext {
+ public:
+ XmlActionContext(const XmlHandlerContext& context, XmlTerminal* terminal,
+ const DataMatchResult& result)
+ : XmlHandlerContext(context), terminal_(terminal), result_(result) {}
+ XmlActionContext(size_t location, const DataRange& range,
+ const DataSegment& segment, const DataLineMap& data_line_map,
+ XmlHandler* handler, XmlTerminal* terminal,
+ const DataMatchResult& result)
+ : XmlHandlerContext(location, range, segment, data_line_map, handler),
+ terminal_(terminal),
+ result_(result) {}
+
+ /// @return The terminal associated with the context.
+ XmlTerminal* GetTerminal() const { return terminal_; }
+
+ /// @return The result associated with the constext.
+ const DataMatchResult& GetResult() const { return result_; }
+
+ /// @param bytes_consumed The value to set in the returned result.
+ /// @return A result based on the context's action, but with its bytes
+ /// consumed value set to the given value.
+ DataMatchResult GetResultWithBytesConsumed(size_t bytes_consumed) const {
+ auto result = result_;
+ return result.SetBytesConsumed(bytes_consumed);
+ }
+
+ private:
+ XmlTerminal* terminal_;
+ DataMatchResult result_;
+};
+
+} // namespace image_io
+} // namespace photos_editing_formats
+
+#endif // IMAGE_IO_XML_XML_ACTION_H_ // NOLINT