Files
Xenia-Canary/src/xenia/base/filesystem_wildcard.h
gibbed 5bf0b34445 C++17ification.
C++17ification!

- Filesystem interaction now uses std::filesystem::path.
- Usage of const char*, std::string have been changed to
  std::string_view where appropriate.
- Usage of printf-style functions changed to use fmt.
2020-04-07 16:09:41 -05:00

62 lines
1.6 KiB
C++

/**
******************************************************************************
* Xenia : Xbox 360 Emulator Research Project *
******************************************************************************
* Copyright 2020 Ben Vanik. All rights reserved. *
* Released under the BSD license - see LICENSE in the root for more details. *
******************************************************************************
*/
#ifndef XENIA_BASE_FILESYSTEM_WILDCARD_H_
#define XENIA_BASE_FILESYSTEM_WILDCARD_H_
#include <iterator>
#include <memory>
#include <string>
#include <vector>
#include "xenia/base/string.h"
namespace xe {
namespace filesystem {
class WildcardFlags {
public:
bool FromStart : 1, ToEnd : 1, ExactLength : 1;
WildcardFlags();
WildcardFlags(bool start, bool end, bool exact_length);
static WildcardFlags FIRST;
static WildcardFlags LAST;
static WildcardFlags ANY;
};
class WildcardRule {
public:
WildcardRule(const std::string_view match, const WildcardFlags& flags);
bool Check(const std::string_view lower,
std::string_view::size_type* offset) const;
private:
std::string match_;
WildcardFlags rules_;
};
class WildcardEngine {
public:
void SetRule(const std::string_view pattern);
// Always ignoring case
bool Match(const std::string_view str) const;
private:
std::vector<WildcardRule> rules_;
void PreparePattern(const std::string_view pattern);
};
} // namespace filesystem
} // namespace xe
#endif // XENIA_BASE_FILESYSTEM_WILDCARD_H_