/***********************************************************************************************
*	Copyright: © 2017-2021 UI Manufaktur UG
*	License: Subject to the terms of the MIT license, as written in the included LICENSE.txt file.
*	Authors: UI Manufaktur Team
*	Documentation [DE]: https://ui-manufaktur.com/docu/uim-core/datatypes/overview
************************************************************************************************/
module uim.core.datatypes;

import std.meta;
import uim.core;

public import uim.core.datatypes.boolean;
public import uim.core.datatypes.datetime;
public import uim.core.datatypes.integral;
public import uim.core.datatypes.json;
public import uim.core.datatypes.floating;
public import uim.core.datatypes.general;
public import uim.core.datatypes.string_;
public import uim.core.datatypes.uuid;

/*
T toogle(T)(T value, T checkValue, T changeValue) if (!isBoolean!T) {
    if (value == checkValue) return changeValue;
    if (value == changeValue) return checkValue;
    return value;
}
unittest {
    assert(1.toggle(1, 2) == 2);
    assert(2.toggle(1, 2) == 1);
    assert(3.toggle(1, 2) == 3);
}*/

T rotate(T)(T value, T[] values, bool directionRight = true) {
    if (values.length > 0)
    foreach(index, val; values) {
        if (val == value) {
            if (directionRight) {
                if (index == values.length-1) return values[0];
                return values[index+1];
            }
            else {
                if (index == 0) return values[$-1];
                return values[index-1];
            }
        }
    }
    return value;
}
unittest {
    assert(1.rotate([2,3,1,4,5]) == 4);
}