summaryrefslogtreecommitdiff
path: root/includes/image_io/base/validated_number.h
blob: ead5ab308d3c93278a919dba057eb4b8230d1d2a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#ifndef IMAGE_IO_BASE_VALIDATED_NUMBER_H_  // NOLINT
#define IMAGE_IO_BASE_VALIDATED_NUMBER_H_  // NOLINT

#include <sstream>
#include <string>

namespace photos_editing_formats {
namespace image_io {

template <class T>
struct ValidatedNumber {
  ValidatedNumber() : ValidatedNumber(T(), false) {}
  ValidatedNumber(const T& value_, bool is_valid_)
      : value(value_), is_valid(is_valid_) {}
  using value_type = T;
  T value;
  bool is_valid;
};

template <class T>
ValidatedNumber<T> GetValidatedNumber(const std::string& str) {
  std::stringstream ss(str);
  ValidatedNumber<T> result;
  ss >> result.value;
  if (!ss.fail()) {
    std::string extra;
    ss >> extra;
    if (extra.empty()) {
      result.is_valid = true;
    }
  }
  return result;
}

}  // namespace image_io
}  // namespace photos_editing_formats

#endif  // IMAGE_IO_BASE_VALIDATED_NUMBER_H_  // NOLINT