blob: cfc1d2f8b07cdd450e58e1454949da14cbd67601 [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