#include "casbin/pch.h"

#ifndef PARSEIPV4_CPP
#define PARSEIPV4_CPP

#include "casbin/ip_parser/parser/parseIPv4.h"

namespace casbin {

IP parseIPv4(std::string_view s) {
    std::vector<byte> pb(IP ::IPv4len, 0);
    IP ipv4;
    for (int i = 0; i < IP ::IPv4len; i++) {
        if (s.length() == 0) {
            // Missing octets.
            ipv4.isLegal = false;
            return ipv4;
        }
        if (i > 0) {
            if (s[0] != '.') {
                ipv4.isLegal = false;
                return ipv4;
            }
            s = s.substr(1, s.length() - 1);
        }
        std::pair<int, int> p = dtoi(s);
        if ((p.first >= big || p.second == 0) || p.first > 0xFF) {
            ipv4.isLegal = false;
            return ipv4;
        }
        s = s.substr(p.second, s.length() - p.second);
        pb[i] = p.first;
    }
    if (s.length() != 0) {
        ipv4.isLegal = false;
        return ipv4;
    }
    return IPv4(pb[0], pb[1], pb[2], pb[3]);
}

} // namespace casbin

#endif // PARSEIPV4_CPP
