Commit 4e302fa9 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

update formatter API to use Value type

parent f64e1cfa
Loading
Loading
Loading
Loading
+22 −37
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
#include "domain.h"
#include <assert.h>

namespace plotfx {

@@ -144,25 +145,37 @@ std::vector<double> domain_translate(
      return domain_translate_linear(domain, series);
    case DomainKind::CATEGORICAL:
      return domain_translate_categorical(domain, series);
    default:
      assert(false);
  }
}

double domain_untranslate(const DomainConfig& domain, double vt) {
Series domain_untranslate_linear(const DomainConfig& domain, std::vector<double> values) {
  auto min = domain.min.value_or(0.0f);
  auto max = domain.max.value_or(0.0f);

  Series s;
  for (auto vt : values) {
    if (domain.inverted) {
      vt = 1.0 - vt;
    }

  auto v = 0.0;
    s.emplace_back(value_from_float(min + (max - min) * vt));
  }

  return s;
}

Series domain_untranslate(
    const DomainConfig& domain,
    const std::vector<double>& values) {
  switch (domain.kind) {
    case DomainKind::LINEAR:
      v = min + (max - min) * vt;
      break;
    case DomainKind::CATEGORICAL:
      return domain_untranslate_linear(domain, values);
    default:
      assert(false);
  }

  return v;
}

ReturnCode confgure_domain_kind(
@@ -181,33 +194,5 @@ ReturnCode confgure_domain_kind(
  return ERROR_INVALID_ARGUMENT;
}

namespace chart {

/*
const char AnyDomain::kDimensionLetters[] = "xyz";
const int AnyDomain::kDefaultNumTicks = 8;
const double AnyDomain::kDefaultDomainPadding = 0.1;

template <> Domain<int64_t>*
    Domain<int64_t>::mkDomain() {
  return new ContinuousDomain<int64_t>();
}

template <> Domain<double>*
    Domain<double>::mkDomain() {
  return new ContinuousDomain<double>();
}

template <> Domain<UnixTime>*
    Domain<UnixTime>::mkDomain() {
  return new TimeDomain();
}

template <> Domain<std::string>* Domain<std::string>::mkDomain() {
  return new DiscreteDomain<std::string>();
}
*/

}
}
} // namespace plotfx
+3 −1
Original line number Diff line number Diff line
@@ -61,7 +61,9 @@ std::vector<double> domain_translate(
    const DomainConfig& domain,
    const Series& series);

double domain_untranslate(const DomainConfig& domain, double v);
Series domain_untranslate(
    const DomainConfig& domain,
    const std::vector<double>& data);

ReturnCode confgure_domain_kind(
    const plist::Property& prop,
+6 −6
Original line number Diff line number Diff line
@@ -37,9 +37,9 @@ namespace plotfx {

Formatter format_decimal_scientific(size_t precision) {
  Formatter f;
  f.format_number = [precision] (double v) -> std::string {
  f.format_value = [precision] (const Value& v) -> std::string {
    std::stringstream s;
    s << std::scientific << std::setprecision(precision) << v;
    s << std::scientific << std::setprecision(precision) << value_to_float(v);
    return s.str();
  };

@@ -74,9 +74,9 @@ ReturnCode confgure_format_decimal_scientific(

Formatter format_decimal_fixed(size_t precision) {
  Formatter f;
  f.format_number = [precision] (double v) -> std::string {
  f.format_value = [precision] (const Value& v) -> std::string {
    std::stringstream s;
    s << std::fixed << std::setprecision(precision) << v;
    s << std::fixed << std::setprecision(precision) << value_to_float(v);
    return s.str();
  };

@@ -111,8 +111,8 @@ ReturnCode confgure_format_decimal_fixed(

Formatter format_datetime(const std::string& fmt) {
  Formatter f;
  f.format_number = [fmt] (double v) -> std::string {
    UnixTime v_t(v * 1000000);
  f.format_value = [fmt] (const Value& v) -> std::string {
    UnixTime v_t(value_to_float(v) * 1000000);
    return v_t.toString(fmt.c_str());
  };

+2 −2
Original line number Diff line number Diff line
@@ -32,12 +32,12 @@
#include <optional>
#include <plist/plist.h>
#include "utils/return_code.h"
#include "series.h"

namespace plotfx {

struct Formatter {
  std::function<std::string (double)> format_number;
  std::function<std::string (const std::string&)> format_string;
  std::function<std::string (const Value&)> format_value;
};

Formatter format_decimal_scientific(size_t precision);
+4 −0
Original line number Diff line number Diff line
@@ -55,5 +55,9 @@ double value_to_float(const Value& v) {
  }
}

Value value_from_float(double v) {
  return std::to_string(v);
}

} // namespace plotfx
Loading