obfs, string: Modify file name

This commit is contained in:
revsic
2019-02-18 05:24:30 +09:00
parent ca8ecf7c2e
commit cc078810f1
2 changed files with 65 additions and 38 deletions
+65
View File
@@ -0,0 +1,65 @@
#ifndef STRING_OBFS
#define STRING_OBFS
#include "random.hpp"
#include "sequence.hpp"
#include <utility>
namespace obfs {
using Encoder = char(*)(char);
using Decoder = char(*)(char);
template <std::size_t size, Encoder encoder, Decoder decoder>
class String {
public:
template <std::size_t... Idx>
constexpr String(char const* str,
std::index_sequence<Idx...>):
str{ encoder(str[Idx])... } {
// Do Nothing
}
constexpr std::size_t len() const {
return size;
}
inline char const* decode() const {
for (char& chr : str) {
chr = decoder(chr);
}
return str;
}
private:
mutable char str[size];
};
template <Encoder encoder, Decoder decoder, std::size_t size>
constexpr auto make_string(char const (&str)[size]) {
return String<size, encoder, decoder>(str, std::make_index_sequence<size>());
}
template <Encoder... encoders>
using encoder_seq = Sequence<Encoder, encoders...>;
template <Decoder... decoders>
using decoder_seq = Sequence<Decoder, decoders...>;
template <typename EncoderSeq, typename DecoderSeq>
using make_table = SeqPack<EncoderSeq, DecoderSeq>;
template <typename Table, std::size_t size>
constexpr auto make_string(char const (&str)[size]) {
using pair = Table::get<OBFS_RAND_VAL(Table::size)>;
// constexpr Encoder encoder = pair::get<0>::value;
// constexpr Decoder decoder = pair::get<1>::value;
constexpr Encoder encoder = pair::type::value;
constexpr Decoder decoder = pair::next::type::value;
return make_string<encoder, decoder>(str);
}
}
#endif
-38
View File
@@ -1,38 +0,0 @@
#ifndef STRING_OBFS
#define STRING_OBFS
#include <utility>
namespace obfs {
template <std::size_t size, char(*encoder)(char), char(*decoder)(char)>
class String {
public:
template <std::size_t... Idx>
constexpr String(char const* str,
std::index_sequence<Idx...>):
str{ encoder(str[Idx])... } {
// Do Nothing
}
constexpr std::size_t len() const {
return size;
}
inline char const* decode() const {
for (char& chr : str) {
chr = decoder(chr);
}
return str;
}
private:
mutable char str[size];
};
template <char(*encoder)(char), char(*decoder)(char), std::size_t size>
constexpr auto make_string(char const (&str)[size]) {
return String<size, encoder, decoder>(str, std::make_index_sequence<size>());
}
}
#endif