Commit d6354236 authored by Paul Asmuth's avatar Paul Asmuth
Browse files

move 'fallback' method into utils/algo.h, cleanups

parent 9a7ecbb7
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -105,12 +105,6 @@ ReturnCode configure_series(

ParserFn configure_series_fn(SeriesRef* data);

template <typename H, typename... T>
std::vector<H> fallback(const std::vector<H>& head, const T&... tail);

template <typename H, typename... T>
std::vector<H> fallback(const std::optional<H>& head, const T&... tail);

} // namespace plotfx

#include "config_helpers_impl.h"
+0 −32
Original line number Diff line number Diff line
@@ -45,37 +45,5 @@ ReturnCode parseEnum(
  return ReturnCode::success();
}

template <typename H>
std::vector<H> fallback(const std::vector<H>& head) {
  return head;
}

template <typename H, typename... T>
std::vector<H> fallback(const std::vector<H>& head, const T&... tail) {
  if (head.empty()) {
    return fallback(tail...);
  } else {
    return head;
  }
}

template <typename H>
std::vector<H> fallback(const std::optional<H>& head) {
  if (head) {
    return {*head};
  } else {
    return {};
  }
}

template <typename H, typename... T>
std::vector<H> fallback(const std::optional<H>& head, const T&... tail) {
  if (head) {
    return {*head};
  } else {
    return fallback(tail...);
  }
}

} // namespace plotfx
+0 −19
Original line number Diff line number Diff line
@@ -118,25 +118,6 @@ Value value_from_float(double v) {
  return std::to_string(v);
}

std::vector<DataGroup> column_group(const DataColumn& col) {
  std::vector<DataGroup> groups;

  for (size_t idx = 0; idx < col.data.size(); ) {
    DataGroup g;
    g.key = col.data[idx];
    g.begin = idx;
    g.end = idx;

    while (g.end < col.data.size() && col.data[g.end] == col.data[g.begin]) {
      g.end = ++idx;
    }

    groups.emplace_back(g);
  }

  return groups;
}

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

+0 −2
Original line number Diff line number Diff line
@@ -70,8 +70,6 @@ Value data_lookup(
    const std::string& key,
    size_t idx);

std::vector<DataGroup> column_group(const DataColumn& col);

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

SeriesRef series_find(

common/utils/algo.h

0 → 100644
+44 −0
Original line number Diff line number Diff line
/**
 * This file is part of the "plotfx" project
 *   Copyright (c) 2018 Paul Asmuth
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 * 
 * * Redistributions of source code must retain the above copyright notice, this
 *   list of conditions and the following disclaimer.
 * 
 * * Redistributions in binary form must reproduce the above copyright notice,
 *   this list of conditions and the following disclaimer in the documentation
 *   and/or other materials provided with the distribution.
 * 
 * * Neither the name of the copyright holder nor the names of its
 *   contributors may be used to endorse or promote products derived from
 *   this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
#pragma once
#include <optional>
#include <vector>

namespace plotfx {

template <typename H, typename... T>
std::vector<H> fallback(const std::vector<H>& head, const T&... tail);

template <typename H, typename... T>
std::vector<H> fallback(const std::optional<H>& head, const T&... tail);

} // namespace plotfx

#include "algo_impl.h"
Loading