resolver.h
Go to the documentation of this file.
1 /*
2  resolver.h -- A simple class for cross-platform path resolution
3 
4  Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
5 
6  All rights reserved. Use of this source code is governed by a
7  BSD-style license that can be found in the LICENSE file.
8 */
9 
10 #pragma once
11 
12 #include "path.h"
13 
14 NAMESPACE_BEGIN(filesystem)
15 
16 
23 class resolver {
24 public:
25  typedef std::vector<path>::iterator iterator;
26  typedef std::vector<path>::const_iterator const_iterator;
27 
29  m_paths.push_back(path::getcwd());
30  }
31 
32  size_t size() const { return m_paths.size(); }
33 
34  iterator begin() { return m_paths.begin(); }
35  iterator end() { return m_paths.end(); }
36 
37  const_iterator begin() const { return m_paths.begin(); }
38  const_iterator end() const { return m_paths.end(); }
39 
40  void erase(iterator it) { m_paths.erase(it); }
41 
42  void prepend(const path &path) { m_paths.insert(m_paths.begin(), path); }
43  void append(const path &path) { m_paths.push_back(path); }
44  const path &operator[](size_t index) const { return m_paths[index]; }
45  path &operator[](size_t index) { return m_paths[index]; }
46 
47  path resolve(const path &value) const {
48  for (const_iterator it = m_paths.begin(); it != m_paths.end(); ++it) {
49  path combined = *it / value;
50  if (combined.exists())
51  return combined;
52  }
53  return value;
54  }
55 
56  friend std::ostream &operator<<(std::ostream &os, const resolver &r) {
57  os << "resolver[" << std::endl;
58  for (size_t i = 0; i < r.m_paths.size(); ++i) {
59  os << " \"" << r.m_paths[i] << "\"";
60  if (i + 1 < r.m_paths.size())
61  os << ",";
62  os << std::endl;
63  }
64  os << "]";
65  return os;
66  }
67 
68 private:
69  std::vector<path> m_paths;
70 };
71 
72 NAMESPACE_END(filesystem)
path.h
resolver::operator[]
path & operator[](size_t index)
Definition: resolver.h:45
path::exists
bool exists() const
Definition: path.h:93
resolver::iterator
std::vector< path >::iterator iterator
Definition: resolver.h:25
resolver::resolver
resolver()
Definition: resolver.h:28
resolver::resolve
path resolve(const path &value) const
Definition: resolver.h:47
resolver::end
iterator end()
Definition: resolver.h:35
resolver::m_paths
std::vector< path > m_paths
Definition: resolver.h:69
resolver::operator[]
const path & operator[](size_t index) const
Definition: resolver.h:44
resolver::prepend
void prepend(const path &path)
Definition: resolver.h:42
NAMESPACE_END
#define NAMESPACE_END(name)
Definition: fwd.h:16
resolver::operator<<
friend std::ostream & operator<<(std::ostream &os, const resolver &r)
Definition: resolver.h:56
resolver::begin
iterator begin()
Definition: resolver.h:34
resolver::const_iterator
std::vector< path >::const_iterator const_iterator
Definition: resolver.h:26
resolver
Simple class for resolving paths on Linux/Windows/Mac OS.
Definition: resolver.h:23
resolver::erase
void erase(iterator it)
Definition: resolver.h:40
resolver::size
size_t size() const
Definition: resolver.h:32
resolver::end
const_iterator end() const
Definition: resolver.h:38
resolver::append
void append(const path &path)
Definition: resolver.h:43
NAMESPACE_BEGIN
#define NAMESPACE_BEGIN(name)
Definition: fwd.h:13
path
Simple class for manipulating paths on Linux/Windows/Mac OS.
Definition: path.h:42
path::getcwd
static path getcwd()
Definition: path.h:266
resolver::begin
const_iterator begin() const
Definition: resolver.h:37


behaviortree_cpp_v3
Author(s): Michele Colledanchise, Davide Faconti
autogenerated on Wed Jun 26 2024 02:51:19