blob: 414028bc0505611c6cecb07a63add5b45e6644a2 [file] [log] [blame]
#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