Skip to content

Commit

Permalink
libstd: Added crc8, crc16 and crc64
Browse files Browse the repository at this point in the history
  • Loading branch information
WerWolv committed Jul 2, 2024
1 parent 00ec7be commit a442c5f
Showing 1 changed file with 36 additions and 10 deletions.
46 changes: 36 additions & 10 deletions lib/source/pl/lib/std/hash.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,27 +9,53 @@

namespace pl::lib::libstd::hash {

template<size_t Size>
static u128 crc(const auto &params) {
auto pattern = params[0].toPattern();
auto init = params[1].toUnsigned();
auto poly = params[2].toUnsigned();
auto xorout = params[3].toUnsigned();
auto reflectIn = params[4].toUnsigned();
auto reflectOut = params[5].toUnsigned();

wolv::hash::Crc<Size> crc(poly, init, xorout, reflectIn, reflectOut);
crc.process(pattern->getBytes());

return u128(crc.getResult());
}

void registerFunctions(pl::PatternLanguage &runtime) {
using FunctionParameterCount = pl::api::FunctionParameterCount;
using namespace pl::core;

api::Namespace nsStdHash = { "builtin", "std", "hash" };
{
/* crc8(pattern, init, poly, xorout, reflect_in, reflect_out) */
runtime.addFunction(nsStdHash, "crc8", FunctionParameterCount::exactly(6), [](Evaluator *ctx, const auto &params) -> std::optional<Token::Literal> {
wolv::util::unused(ctx);

return crc<8>(params);
});

/* crc16(pattern, init, poly, xorout, reflect_in, reflect_out) */
runtime.addFunction(nsStdHash, "crc16", FunctionParameterCount::exactly(6), [](Evaluator *ctx, const auto &params) -> std::optional<Token::Literal> {
wolv::util::unused(ctx);

return crc<16>(params);
});

/* crc32(pattern, init, poly, xorout, reflect_in, reflect_out) */
runtime.addFunction(nsStdHash, "crc32", FunctionParameterCount::exactly(6), [](Evaluator *ctx, auto params) -> std::optional<Token::Literal> {
runtime.addFunction(nsStdHash, "crc32", FunctionParameterCount::exactly(6), [](Evaluator *ctx, const auto &params) -> std::optional<Token::Literal> {
wolv::util::unused(ctx);

auto pattern = params[0].toPattern();
auto init = params[1].toUnsigned();
auto poly = params[2].toUnsigned();
auto xorout = params[3].toUnsigned();
auto reflectIn = params[4].toUnsigned();
auto reflectOut = params[5].toUnsigned();
return crc<32>(params);
});

wolv::hash::Crc<32> crc(poly, init, xorout, reflectIn, reflectOut);
crc.process(pattern->getBytes());
/* crc64(pattern, init, poly, xorout, reflect_in, reflect_out) */
runtime.addFunction(nsStdHash, "crc64", FunctionParameterCount::exactly(6), [](Evaluator *ctx, const auto &params) -> std::optional<Token::Literal> {
wolv::util::unused(ctx);

return u128(crc.getResult());
return crc<64>(params);
});
}
}
Expand Down

0 comments on commit a442c5f

Please sign in to comment.