/*
    License:   $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
    Authors:   Adam Búš
*/
module btl.internal.traits;

import std.traits : isSomeChar, isArray;
import std.range : ElementEncodingType, isInputRange;



public enum isCharArray(T) = true
    && is(T : C[N], C, size_t N)
    && isSomeChar!C;

public template isInputCharRange(T){

    enum bool isInputCharRange = true
        && isSomeChar!(ElementEncodingType!T)
        && (isInputRange!T || isArray!T);
}


//min/max:
version(D_BetterC){

    public auto min(A, B)(auto ref A a, auto ref B b){
        return (a < b)
            ? a
            : b;
    }
    public auto max(A, B)(auto ref A a, auto ref B b){
        return (a > b)
            ? a
            : b;
    }
}
else{
    public import std.algorithm.comparison :  min, max;
}