| #include "casbin/pch.h" |
| |
| #ifndef CIDRMASK_CPP |
| #define CIDRMASK_CPP |
| |
| #include "casbin/ip_parser/parser/CIDRMask.h" |
| |
| namespace casbin { |
| |
| IPMask CIDRMask(int ones, int bits) { |
| IPMask mask; |
| if (bits != 8 * IP ::IPv4len && bits != 8 * IP ::IPv6len) { |
| return mask; |
| } |
| if (ones < 0 || ones > bits) { |
| return mask; |
| } |
| int l = bits / 8; |
| IPMask newMask(l, 0); |
| mask = newMask; |
| int n = int(ones); |
| for (int i = 0; i < l; i++) { |
| if (n >= 8) { |
| mask[i] = 0xff; |
| n -= 8; |
| continue; |
| } |
| mask[i] = ~char(0xff >> n); |
| n = 0; |
| } |
| return mask; |
| } |
| |
| } // namespace casbin |
| |
| #endif // CIDRMASK_CPP |