From 5b83899a03642d18deb6a85dabfb1afd8d76422e Mon Sep 17 00:00:00 2001 From: JustinAJ Date: Sun, 3 Jan 2016 18:36:24 -0500 Subject: [PATCH] Added functions: * Jupiter_prefix_length_to_bitmask(uint8_t) * Jupiter_prefix_length_to_netmask(uint8_t) --- Jupiter/Functions.c | 40 +++++++++++++++++++++++++++++++++++++++- Jupiter/Functions.h | 18 ++++++++++++++++++ Release/Jupiter.lib | Bin 304222 -> 304802 bytes 3 files changed, 57 insertions(+), 1 deletion(-) diff --git a/Jupiter/Functions.c b/Jupiter/Functions.c index 7d13074..d491631 100644 --- a/Jupiter/Functions.c +++ b/Jupiter/Functions.c @@ -1013,4 +1013,42 @@ double Jupiter_strtod_nospace_s(const char *str, size_t length) } return total; -} \ No newline at end of file +} + +/** Prefix length to bitmask conversion tables */ + +const uint32_t bitmask_table[] = +{ + 0x00000000U, 0x80000000U, 0xC0000000U, 0xE0000000U, + 0xF0000000U, 0xF8000000U, 0xFC000000U, 0xFE000000U, + 0xFF000000U, 0xFF800000U, 0xFFC00000U, 0xFFE00000U, + 0xFFF00000U, 0xFFF80000U, 0xFFFC0000U, 0xFFFE0000U, + 0xFFFF0000U, 0xFFFF8000U, 0xFFFFC000U, 0xFFFFE000U, + 0xFFFFF000U, 0xFFFFF800U, 0xFFFFFC00U, 0xFFFFFE00U, + 0xFFFFFF00U, 0xFFFFFF80U, 0xFFFFFFC0U, 0xFFFFFFE0U, + 0xFFFFFFF0U, 0xFFFFFFF8U, 0xFFFFFFFCU, 0xFFFFFFFEU, + 0xFFFFFFFFU +}; + +const unsigned char *netmask_table[] = +{ + "\x00\x00\x00\x00", "\x80\x00\x00\x00", "\xC0\x00\x00\x00", "\xE0\x00\x00\x00", + "\xF0\x00\x00\x00", "\xF8\x00\x00\x00", "\xFC\x00\x00\x00", "\xFE\x00\x00\x00", + "\xFF\x00\x00\x00", "\xFF\x80\x00\x00", "\xFF\xC0\x00\x00", "\xFF\xE0\x00\x00", + "\xFF\xF0\x00\x00", "\xFF\xF8\x00\x00", "\xFF\xFC\x00\x00", "\xFF\xFE\x00\x00", + "\xFF\xFF\x00\x00", "\xFF\xFF\x80\x00", "\xFF\xFF\xC0\x00", "\xFF\xFF\xE0\x00", + "\xFF\xFF\xF0\x00", "\xFF\xFF\xF8\x00", "\xFF\xFF\xFC\x00", "\xFF\xFF\xFE\x00", + "\xFF\xFF\xFF\x00", "\xFF\xFF\xFF\x80", "\xFF\xFF\xFF\xC0", "\xFF\xFF\xFF\xE0", + "\xFF\xFF\xFF\xF0", "\xFF\xFF\xFF\xF8", "\xFF\xFF\xFF\xFC", "\xFF\xFF\xFF\xFE", + "\xFF\xFF\xFF\xFF" +}; + +uint32_t Jupiter_prefix_length_to_bitmask(uint8_t prefix_length) +{ + return bitmask_table[prefix_length]; +} + +uint32_t Jupiter_prefix_length_to_netmask(uint8_t prefix_length) +{ + return *(uint32_t *)netmask_table[prefix_length]; +} diff --git a/Jupiter/Functions.h b/Jupiter/Functions.h index 409018f..dd3bb5e 100644 --- a/Jupiter/Functions.h +++ b/Jupiter/Functions.h @@ -450,6 +450,24 @@ JUPITER_API unsigned long long Jupiter_strtoull_nospace_s(const char *str, size_ */ JUPITER_API double Jupiter_strtod_nospace_s(const char *str, size_t length); +/** +* @brief Converts an input prefix length into a bitmask +* Note: Local byte order +* +* @param prefix_length Prefix length to convert +* @return Bitmask represented by prefix_length +*/ +JUPITER_API uint32_t Jupiter_prefix_length_to_bitmask(uint8_t prefix_length); + +/** +* @brief Converts an input prefix length into a netmask +* Note: Network byte order +* +* @param prefix_length Prefix length to convert +* @return Netmask represented by prefix_length +*/ +JUPITER_API uint32_t Jupiter_prefix_length_to_netmask(uint8_t prefix_length); + #if defined __cplusplus } diff --git a/Release/Jupiter.lib b/Release/Jupiter.lib index dd0d014ef09790db497ea7b94309e7461d224fdd..3e8c8fe6fcb7f6ee64dac60cedb0e7c46328558d 100644 GIT binary patch delta 36555 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 aysmi2^Gk;sG@~Cx!T-f-g}y_F(*FWYgya|i delta 35693 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 Xhd$S2Q178VhQxR8*N^@O;N70+