10#include <rime/build_config.h>
22#define BOOST_BIND_NO_PLACEHOLDERS
23#include <boost/signals2/connection.hpp>
24#include <boost/signals2/signal.hpp>
25#include <boost/unordered_map.hpp>
26#include <boost/unordered_set.hpp>
28#ifdef RIME_ENABLE_LOGGING
29#include <glog/logging.h>
35#define RIME_THIS_CALL(f) (this->*(f))
37#define RIME_THIS_CALL_AS(T, f) ((T*)this->*(f))
45using std::make_unique;
52template <
class Key,
class T>
58using the = std::unique_ptr<T>;
60using an = std::shared_ptr<T>;
64using weak = std::weak_ptr<T>;
66template <
class X,
class Y>
68 return std::dynamic_pointer_cast<X>(ptr);
71template <
class X,
class Y>
76template <
class T,
class... Args>
78 return std::make_shared<T>(std::forward<Args>(args)...);
81using boost::signals2::connection;
82using boost::signals2::signal;
84class path :
public std::filesystem::path {
85 using fs_path = std::filesystem::path;
89 path(
const fs_path& p) : fs_path(p) {}
90 path(fs_path&& p) : fs_path(std::move(p)) {}
93 explicit path(
const std::string& utf8_path)
94 : fs_path(std::
filesystem::u8path(utf8_path)) {}
95 explicit path(
const char* utf8_path)
96 : fs_path(std::filesystem::u8path(utf8_path)) {}
99 explicit path(
const std::string& utf8_path) : fs_path(utf8_path) {}
100 explicit path(
const char* utf8_path) : fs_path(utf8_path) {}
110 return path(lhs) /= rhs;
113 return path(lhs) /= rhs;
116 return path(lhs) /= rhs;
131#ifdef RIME_ENABLE_LOGGING
132 friend std::ostream&
operator<<(std::ostream& os,
const path& p) {
133 return os << p.u8string();
std::shared_ptr< T > an
Definition common.h:60
std::weak_ptr< T > weak
Definition common.h:64
std::ostream & operator<<(std::ostream &stream, const Reference &reference)
Definition config_compiler.cc:12
an< X > As(const an< Y > &ptr)
Definition common.h:67
boost::unordered_map< Key, T > hash_map
Definition common.h:53
std::unique_ptr< T > the
Definition common.h:58
bool Is(const an< Y > &ptr)
Definition common.h:72
boost::unordered_set< T > hash_set
Definition common.h:55
an< T > of
Definition common.h:62
an< T > New(Args &&... args)
Definition common.h:77
friend path operator/(const fs_path &lhs, const std::string &rhs)
Definition common.h:125
friend path operator/(const fs_path &lhs, const path &rhs)
Definition common.h:115
path & operator/=(const fs_path &p)
Definition common.h:104
friend path operator/(const fs_path &lhs, const char *rhs)
Definition common.h:128
friend path operator/(const path &lhs, const fs_path &rhs)
Definition common.h:112
friend path operator/(const path &lhs, const path &rhs)
Definition common.h:109
friend path operator/(const path &lhs, const char *rhs)
Definition common.h:122
path & operator/=(const char *p)
Definition common.h:107
friend path operator/(const path &lhs, const std::string &rhs)
Definition common.h:119
path & operator/=(const std::string &p)
Definition common.h:106
path(fs_path &&p)
Definition common.h:90
path(const std::string &utf8_path)
Definition common.h:99
path(const char *utf8_path)
Definition common.h:100
path(const fs_path &p)
Definition common.h:89
path()
Definition common.h:88
path & operator/=(const path &p)
Definition common.h:103