Skip to content

Commit

Permalink
graph sample.
Browse files Browse the repository at this point in the history
  • Loading branch information
Bowen Fu committed Oct 30, 2021
1 parent 8c4fbf3 commit 0099ebf
Show file tree
Hide file tree
Showing 6 changed files with 91 additions and 2,075 deletions.
6 changes: 6 additions & 0 deletions develop/matchit.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
// Replace include/matchit.h with this file when developing.

#include "../develop/matchit/core.h"
#include "../develop/matchit/expression.h"
#include "../develop/matchit/patterns.h"
#include "../develop/matchit/utility.h"
43 changes: 22 additions & 21 deletions develop/matchit/patterns.h
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,22 @@ namespace matchit
static_assert(std::is_same_v<decayArrayT<int32_t const[]>, int32_t const *>);
static_assert(std::is_same_v<decayArrayT<int32_t const &>, int32_t const &>);

template <typename T>
struct AddConstToPointer
{
using type = std::conditional_t<
!std::is_pointer_v<T>, T,
std::add_pointer_t<std::add_const_t<std::remove_pointer_t<T>>>>;
};
template <typename T>
using AddConstToPointerT = typename AddConstToPointer<T>::type;

static_assert(std::is_same_v<AddConstToPointerT<void *>, void const *>);
static_assert(std::is_same_v<AddConstToPointerT<int32_t>, int32_t>);

template <typename Pattern>
using EscapeArrayT = AddConstToPointerT<decayArrayT<Pattern>>;

template <typename Pattern>
class PatternTraits;

Expand Down Expand Up @@ -310,7 +326,7 @@ namespace matchit

private:
Pattern const mPattern;
Func const mHandler;
std::conditional_t<std::is_function_v<Func>, Func const &, Func const> mHandler;
};

template <typename Pattern, typename Pred>
Expand Down Expand Up @@ -439,7 +455,7 @@ namespace matchit
constexpr auto const &patterns() const { return mPatterns; }

private:
std::tuple<Patterns...> mPatterns;
std::tuple<EscapeArrayT<Patterns>...> mPatterns;
};

template <typename... Patterns>
Expand Down Expand Up @@ -530,7 +546,7 @@ namespace matchit

private:
Unary const mUnary;
Pattern const mPattern;
EscapeArrayT<Pattern> const mPattern;
};

template <typename Unary, typename Pattern>
Expand Down Expand Up @@ -602,7 +618,7 @@ namespace matchit
constexpr auto const &patterns() const { return mPatterns; }

private:
std::tuple<Patterns...> mPatterns;
std::tuple<EscapeArrayT<Patterns>...> mPatterns;
};

template <typename... Patterns>
Expand Down Expand Up @@ -681,7 +697,7 @@ namespace matchit
auto const &pattern() const { return mPattern; }

private:
Pattern mPattern;
EscapeArrayT<Pattern> mPattern;
};

template <typename Pattern>
Expand Down Expand Up @@ -944,22 +960,7 @@ namespace matchit
constexpr explicit Ds(Patterns const &...patterns) : mPatterns{patterns...} {}
constexpr auto const &patterns() const { return mPatterns; }

private:
template <typename T>
struct AddConstToPointer
{
using type = std::conditional_t<
!std::is_pointer_v<T>, T,
std::add_pointer_t<std::add_const_t<std::remove_pointer_t<T>>>>;
};
template <typename T>
using AddConstToPointerT = typename AddConstToPointer<T>::type;

static_assert(std::is_same_v<AddConstToPointerT<void *>, void const *>);
static_assert(std::is_same_v<AddConstToPointerT<int32_t>, int32_t>);

public:
using Type = std::tuple<AddConstToPointerT<decayArrayT<Patterns>>...>;
using Type = std::tuple<EscapeArrayT<Patterns>...>;

private:
Type mPatterns;
Expand Down
6 changes: 3 additions & 3 deletions develop/matchit/utility.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,16 +93,16 @@ namespace matchit

constexpr auto dsVia = [](auto &&...members)
{
return [members...](auto &&...pats)
return [members...](auto ...pats)
{ return and_(app(members, pats)...); };
};

template <typename T>
constexpr auto asDsVia = [](auto &&...members)
{
return [members...](auto &&...pats)
return [members...](auto ...pats)
{
return as<T>(and_(app(members, pats)...));
return as<T>(dsVia(members...)(pats...));
};
};

Expand Down
Loading

0 comments on commit 0099ebf

Please sign in to comment.