{
if (!rule.rank.is_none ())
{
- return nakeds_t (0u);
+ return nakeds_t::from32(0u);
}
else if (end ())
{
ways.push_back (prefix);
- return nakeds_t (prefix.size ());
+ return nakeds_t::from64(prefix.size ());
}
else if (loop < 2)
{
local_inc _ (loop);
- nakeds_t size (0u);
+ nakeds_t size = nakeds_t::from32(0u);
for (arcsets_t::iterator i = arcsets.begin (); i != arcsets.end (); ++i)
{
way_t w = prefix;
}
else
{
- return nakeds_t (0u);
+ return nakeds_t::from32(0u);
}
}
else if (loop < 2)
{
local_inc _ (loop);
- permuts_t size (0u);
- const permuts_t new_len = len + permuts_t (1u);
+ permuts_t size = permuts_t::from32(0u);
+ const permuts_t new_len = len + permuts_t::from32(1u);
for (arcs_t::iterator i = arcs.begin (); i != arcs.end (); ++i)
{
- const permuts_t new_wid = wid * permuts_t (i->second.size ());
+ const permuts_t new_wid = wid * permuts_t::from64(i->second.size ());
if (new_wid.overflow ())
{
return permuts_t::limit ();
}
else
{
- return permuts_t (0u);
+ return permuts_t::from32(0u);
}
}
template <typename cunit_t, typename key_t>
Node::covers_t Node::cover (const multipath_t & prefix, FILE * input, FILE * keys)
{
- covers_t size (0u);
+ covers_t size = covers_t::from32(0u);
if (end () && suffix == NULL)
{
suffix = new path_t (rule, ctx);
void Skeleton::generate_paths_cunit_key (FILE * input, FILE * keys)
{
multipath_t prefix (nodes->rule, nodes->ctx);
- if (nodes->sizeof_permutate (Node::permuts_t (1u), Node::permuts_t (0u)).overflow ())
+ if (nodes->sizeof_permutate (Node::permuts_t::from32(1u), Node::permuts_t::from32(0u)).overflow ())
{
if (nodes->cover<cunit_t, key_t> (prefix, input, keys).overflow ())
{
count = std::max (count, prefix[i]->size ());
}
- const Node::covers_t size = Node::covers_t (len) * Node::covers_t (count);
+ const Node::covers_t size = Node::covers_t::from64(len) * Node::covers_t::from64(count);
if (!size.overflow ())
{
// input
class u32lim_t
{
uint32_t value;
-
-public:
- // implicit conversion is forbidden, because
- // operands should be converted before operation:
- // uint32_t x, y; ... u32lim_t z = x + y;
- // will result in 32-bit addition and may overflow
explicit u32lim_t (uint32_t x)
: value (x < LIMIT ? x : LIMIT)
{}
: value (x < LIMIT ? static_cast<uint32_t> (x) : LIMIT)
{}
+public:
+ // implicit conversion is forbidden, because
+ // operands should be converted before operation:
+ // uint32_t x, y; ... u32lim_t z = x + y;
+ // will result in 32-bit addition and may overflow
+ // Don't export overloaded constructors: it breaks OS X builds
+ // ('size_t' causes resolution ambiguity)
+ static u32lim_t from32 (uint32_t x) { return u32lim_t(x); }
+ static u32lim_t from64 (uint64_t x) { return u32lim_t(x); }
+
static u32lim_t limit ()
{
return u32lim_t (LIMIT);