Commit 6d60fca2 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

replace the various *_find(...) methods with a generic utility function

parent d6354236
Loading
Loading
Loading
Loading
+0 −41
Original line number Diff line number Diff line
@@ -32,47 +32,6 @@

namespace plotfx {

ReturnCode column_find(
    const DataFrame& frame,
    const std::string& column_name,
    const DataColumn** column) {
  for (const auto& c : frame.columns) {
    if (c.name == column_name) {
      *column = &c;
      return OK;
    }
  }

  return ReturnCode::errorf("EARG", "column not found: $0", column_name);
}

Value data_lookup(
    const DataFrame& data,
    const std::string& key,
    size_t idx) {
  const DataColumn* column;
  if (auto rc = column_find(data, key, &column); !rc) {
    return {};
  }

  if (idx < column->data.size()) {
    return column->data[idx];
  } else {
    return {};
  }
}

SeriesRef series_find(
    const SeriesMap& map,
    const std::string& key) {
  const auto& iter = map.find(key);
  if (iter == map.end()) {
    return nullptr;
  } else {
    return iter->second;
  }
}

size_t series_len(const Series& s) {
  return s.size();
}
+0 −14
Original line number Diff line number Diff line
@@ -54,28 +54,14 @@ struct DataContext {
  SeriesMap defaults;
};

ReturnCode column_find(
    const DataFrame& frame,
    const std::string& column_name,
    const DataColumn** column);

struct DataGroup {
  Value key;
  size_t begin;
  size_t end;
};

Value data_lookup(
    const DataFrame& data,
    const std::string& key,
    size_t idx);

std::vector<DataGroup> series_group(const Series& data);

SeriesRef series_find(
    const SeriesMap& map,
    const std::string& key);

size_t series_len(const Series& s);

bool series_is_numeric(const Series& s);
+1 −12
Original line number Diff line number Diff line
@@ -32,21 +32,10 @@

namespace plotfx {

const DimensionConfig* dimension_find(
    const DimensionMap& map,
    const std::string& key) {
  const auto& iter = map.find(key);
  if (iter == map.end()) {
    return nullptr;
  } else {
    return &iter->second;
  }
}

void dimension_add(
    DimensionMap* map,
    const std::string& key) {
  if (dimension_find(*map, key)) {
  if (map->count(key)) {
    return;
  }

+0 −4
Original line number Diff line number Diff line
@@ -45,10 +45,6 @@ using DimensionMap = std::unordered_map<std::string, DimensionConfig>;
template <typename T>
using DimensionMapFn = std::function<std::vector<T> (const Series&)>;

const DimensionConfig* dimension_find(
    const DimensionMap& map,
    const std::string& key);

void dimension_add(
    DimensionMap* map,
    const std::string& key);
+1 −40
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@
#include "domain.h"
#include <assert.h>
#include <iostream>
#include "utils/algo.h"

namespace plotfx {

@@ -41,28 +42,6 @@ DomainConfig::DomainConfig() :
    inverted(false),
    padding(0.0f) {}

const DomainConfig* domain_find(
    const DomainMap& map,
    const std::string& key) {
  const auto& iter = map.find(key);
  if (iter == map.end()) {
    return nullptr;
  } else {
    return &iter->second;
  }
}

DomainConfig* domain_find(
    DomainMap* map,
    const std::string& key) {
  auto iter = map->find(key);
  if (iter == map->end()) {
    return nullptr;
  } else {
    return &iter->second;
  }
}

void domain_fit_continuous(const Series& data_raw, DomainConfig* domain) {
  auto data = series_to_float(data_raw);

@@ -109,24 +88,6 @@ void domain_fit(const Series& data, DomainConfig* domain) {
  }
}

void domain_fit(
    const DataFrame& data,
    const std::string& data_key,
    const std::string& key,
    DomainMap* domains) {
  const DataColumn* column = nullptr;
  if (auto rc = column_find(data, data_key, &column); !rc) {
    return;
  }

  auto domain = domain_find(domains, key);
  if (!domain) {
    return;
  }

  domain_fit(column->data, domain);
}

size_t domain_cardinality(const DomainConfig& domain) {
  switch (domain.kind) {
    case DomainKind::CATEGORICAL:
Loading