module antlr.v4.runtime.misc.Utils;

import std.array;
import std.traits;
import std.conv;

/**
 * TODO add class description
 */
class Utils
{

    /**
     * @uml
     * @safe
     * @nothrow
     */
    public static size_t rank(T)(T e) @safe nothrow
    {
        foreach (i, member; EnumMembers!T)
        {
            if (e == member)
                return cast(int)(i);
        }
        assert(0, "Not an enum member");
    }

    public static string escapeWhitespace(string s, bool escapeSpaces)
    {
        auto buf = appender!string;
        foreach (char c; s)
        {
            if (c == ' ' && escapeSpaces)
                buf.put('\u00B7');
            else if (c == '\t')
                buf.put("\\t");
            else if (c == '\n')
                buf.put("\\n");
            else if (c == '\r')
                buf.put("\\r");
            else
                buf.put(c);
        }
        return buf.data;
    }

}