module digitalnet.axiom; import std.range, std.traits; /// Test if S is a point set. enum isPointSet(S) = isInputRange!S && isArray!(ElementType!S) && isUnsigned!(ElementType!(ElementType!S)); /// Test if S has a precision parameter. enum hasPrecision(S) = is (size_t == Unqual!(typeof (__traits (getMember, S, "precision")))); /// Test if S has a dimension (over R) parameter. enum hasDimensionR(S) = hasMember!(S, "dimensionR"); /// Test if S has a dimension (over F_2) parameter. enum hasDimensionF2(S) = hasMember!(S, "dimensionF2"); /// Test if S is bisectable. enum isBisectable(S) = is (typeof ( { S P; if (P.bisectable) S[2] Q = P.bisect; }));