blob: 3bde0814bf3cdb19fca1d365cc9a4b292030405f [file] [log] [blame]
#ifndef IMAGE_IO_BASE_DATA_MATCH_RESULT_H_ // NOLINT
#define IMAGE_IO_BASE_DATA_MATCH_RESULT_H_ // NOLINT
#include "image_io/base/message.h"
namespace photos_editing_formats {
namespace image_io {
/// The result of a some sort of match operation of the text in a data segment.
/// The data associated with a match result include the number of bytes
/// consumed to produce the result, type of match, and in the case of an error
/// an optional Message describing the error.
class DataMatchResult {
public:
/// The type of match.
enum Type {
/// An error occurred while performing the match operation.
kError = -1,
/// No match was found.
kNone = 0,
/// A partial match of some sort was found.
kPartial = 1,
/// A partial match was found, but the end of the data in the segment or
/// the available range was found.
kPartialOutOfData = 2,
/// A full match was found.
kFull = 3,
};
DataMatchResult() : DataMatchResult(kNone, 0) {}
explicit DataMatchResult(Type type) : DataMatchResult(type, 0) {}
DataMatchResult(Type type, size_t bytes_consumed)
: message_(Message::kStatus, 0, ""),
bytes_consumed_(bytes_consumed),
type_(type),
has_message_(false),
can_continue_(true) {}
/// @return The type of the match result.
Type GetType() const { return type_; }
/// @return Whether the result indicates processing can continue.
bool CanContinue() const { return can_continue_; }
/// @return Whether the match result has a message associated with it.
bool HasMessage() const { return has_message_; }
/// @return The message associated with the result.
const Message& GetMessage() const { return message_; }
/// @return The number of bytes consumed to produce the result.
size_t GetBytesConsumed() const { return bytes_consumed_; }
/// @param delta The byte count to increase the bytes consumed value with.
size_t IncrementBytesConsumed(size_t delta) {
bytes_consumed_ += delta;
return bytes_consumed_;
}
/// @param type The type to use for this match result.
/// @return A reference to this match result.
DataMatchResult& SetType(Type type) {
type_ = type;
return *this;
}
/// Sets the flag that indicates whether processing can continue.
/// @param can_continue The new value for the can_continue_ flag.
DataMatchResult& SetCanContinue(bool can_continue) {
can_continue_ = can_continue;
return *this;
}
/// @param bytes_consumed The byte count to use for this match result.
/// @return A reference to this match result.
DataMatchResult& SetBytesConsumed(size_t bytes_consumed) {
bytes_consumed_ = bytes_consumed;
return *this;
}
/// @param message The message to use for this match result.
/// @return A reference to this match result.
DataMatchResult& SetMessage(const Message& message) {
message_ = message;
has_message_ = true;
return *this;
}
/// @param type The message type to use for this match result.
/// @param text The message text to use for this match result.
/// @return A reference to this match result.
DataMatchResult& SetMessage(const Message::Type type,
const std::string& text) {
return SetMessage(Message(type, 0, text));
}
/// @param other The other result to test for equality with this one.
/// @return Whether this and the other results are equal
bool operator==(const DataMatchResult& other) const {
return can_continue_ == other.can_continue_ &&
has_message_ == other.has_message_ && type_ == other.type_ &&
bytes_consumed_ == other.bytes_consumed_ &&
message_ == other.message_;
}
/// @param other The other result to test for inequality with this one.
/// @return Whether this and the other results are not equal
bool operator!=(const DataMatchResult& other) const {
return !(*this == other);
}
private:
Message message_;
size_t bytes_consumed_;
Type type_;
bool has_message_;
bool can_continue_;
};
} // namespace image_io
} // namespace photos_editing_formats
#endif // IMAGE_IO_BASE_DATA_MATCH_RESULT_H_ // NOLINT