diff --git a/source/tanya/format/package.d b/source/tanya/format.d similarity index 99% rename from source/tanya/format/package.d rename to source/tanya/format.d index d948edb..46e0add 100644 --- a/source/tanya/format/package.d +++ b/source/tanya/format.d @@ -16,7 +16,6 @@ module tanya.format; import tanya.container.string; import tanya.encoding.ascii; -public import tanya.format.conv; import tanya.math; import tanya.memory.op; import tanya.meta.metafunction; diff --git a/source/tanya/format/conv.d b/source/tanya/format/conv.d deleted file mode 100644 index 160dbf3..0000000 --- a/source/tanya/format/conv.d +++ /dev/null @@ -1,293 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -/** - * This module provides functions for converting between different types. - * - * Copyright: Eugene Wissner 2017. - * License: $(LINK2 https://www.mozilla.org/en-US/MPL/2.0/, - * Mozilla Public License, v. 2.0). - * Authors: Jeff Roberts, $(LINK2 mailto:info@caraus.de, Eugene Wissner) - * Source: $(LINK2 https://github.com/caraus-ecms/tanya/blob/master/source/tanya/format/conv.d, - * tanya/format/conv.d) - */ -module tanya.format.conv; - -import tanya.container.string; -import tanya.memory; -import tanya.memory.op; -import tanya.meta.trait; -import tanya.meta.transform; - -version (unittest) -{ - import tanya.test.assertion; -} - -/** - * Thrown if a type conversion fails. - */ -final class ConvException : Exception -{ - /** - * Params: - * msg = The message for the exception. - * file = The file where the exception occurred. - * line = The line number where the exception occurred. - * next = The previous exception in the chain of exceptions, if any. - */ - this(string msg, - string file = __FILE__, - size_t line = __LINE__, - Throwable next = null) @nogc @safe pure nothrow - { - super(msg, file, line, next); - } -} - -/** - * If the source type $(D_PARAM From) and the target type $(D_PARAM To) are - * equal, does nothing. If $(D_PARAM From) can be implicitly converted to - * $(D_PARAM To), just returns $(D_PARAM from). - * - * Params: - * To = Target type. - * - * Returns: $(D_PARAM from). - */ -deprecated("Use tanya.conv.to instead") -template to(To) -{ - /** - * Params: - * From = Source type. - * from = Source value. - */ - ref To to(From)(ref From from) - if (is(To == From)) - { - return from; - } - - /// ditto - To to(From)(From from) - if (is(Unqual!To == Unqual!From) || (isNumeric!From && isFloatingPoint!To)) - { - return from; - } -} - -/** - * Performs checked conversion from an integral type $(D_PARAM From) to an - * integral type $(D_PARAM To). - * - * Params: - * From = Source type. - * To = Target type. - * from = Source value. - * - * Returns: $(D_PARAM from) converted to $(D_PARAM To). - * - * Throws: $(D_PSYMBOL ConvException) if $(D_PARAM from) is too small or too - * large to be represented by $(D_PARAM To). - */ -deprecated("Use tanya.conv.to instead") -To to(To, From)(From from) -if (isIntegral!From - && isIntegral!To - && !is(Unqual!To == Unqual!From) - && !is(To == enum)) -{ - static if ((isUnsigned!From && isSigned!To && From.sizeof == To.sizeof) - || From.sizeof > To.sizeof) - { - if (from > To.max) - { - throw make!ConvException(defaultAllocator, - "Positive integer overflow"); - } - } - static if (isSigned!From) - { - static if (isUnsigned!To) - { - if (from < 0) - { - throw make!ConvException(defaultAllocator, - "Negative integer overflow"); - } - } - else static if (From.sizeof > To.sizeof) - { - if (from < To.min) - { - throw make!ConvException(defaultAllocator, - "Negative integer overflow"); - } - } - } - static if (From.sizeof <= To.sizeof) - { - return from; - } - else static if (isSigned!To) - { - return cast(To) from; - } - else - { - return from & To.max; - } -} - -/** - * Converts $(D_PARAM from) to a boolean. - * - * If $(D_PARAM From) is a numeric type, then `1` becomes $(D_KEYWORD true), - * `0` $(D_KEYWORD false). Otherwise $(D_PSYMBOL ConvException) is thrown. - * - * If $(D_PARAM To) is a string (built-in string or $(D_PSYMBOL String)), - * then `"true"` or `"false"` are converted to the appropriate boolean value. - * Otherwise $(D_PSYMBOL ConvException) is thrown. - * - * Params: - * From = Source type. - * To = Target type. - * from = Source value. - * - * Returns: $(D_KEYWORD from) converted to a boolean. - * - * Throws: $(D_PSYMBOL ConvException) if $(D_PARAM from) isn't convertible. - */ -deprecated("Use tanya.conv.to instead") -To to(To, From)(From from) -if (isNumeric!From && is(Unqual!To == bool) && !is(Unqual!To == Unqual!From)) -{ - if (from == 0) - { - return false; - } - else if (from < 0) - { - throw make!ConvException(defaultAllocator, - "Negative number overflow"); - } - else if (from <= 1) - { - return true; - } - throw make!ConvException(defaultAllocator, - "Positive number overflow"); -} - -/// ditto -deprecated("Use tanya.conv.to instead") -To to(To, From)(auto ref const From from) -if ((is(From == String) || isSomeString!From) && is(Unqual!To == bool)) -{ - if (from == "true") - { - return true; - } - else if (from == "false") - { - return false; - } - throw make!ConvException(defaultAllocator, - "String doesn't contain a boolean value"); -} - -/** - * Converts a boolean to $(D_PARAM To). - * - * If $(D_PARAM To) is a numeric type, then $(D_KEYWORD true) becomes `1`, - * $(D_KEYWORD false) `0`. - * - * If $(D_PARAM To) is a $(D_PSYMBOL String), then `"true"` or `"false"` - * is returned. - * - * Params: - * From = Source type. - * To = Target type. - * from = Source value. - * - * Returns: $(D_PARAM from) converted to $(D_PARAM To). - */ -deprecated("Use tanya.conv.to instead") -To to(To, From)(const From from) -if (is(Unqual!From == bool) && isNumeric!To && !is(Unqual!To == Unqual!From)) -{ - return from; -} - -/// ditto -deprecated("Use tanya.conv.to instead") -To to(To, From)(const From from) -if (is(Unqual!From == bool) && is(Unqual!To == String)) -{ - return String(from ? "true" : "false"); -} - -/** - * Converts a floating point number to an integral type. - * - * Params: - * From = Source type. - * To = Target type. - * from = Source value. - * - * Returns: Truncated $(D_PARAM from) (everything after the decimal point is - * dropped). - * - * Throws: $(D_PSYMBOL ConvException) if - * $(D_INLINECODE from < To.min || from > To.max). - */ -deprecated("Use tanya.conv.to instead") -To to(To, From)(From from) -if (isFloatingPoint!From - && isIntegral!To - && !is(Unqual!To == Unqual!From) - && !is(To == enum)) -{ - if (from > To.max) - { - throw make!ConvException(defaultAllocator, - "Positive number overflow"); - } - else if (from < To.min) - { - throw make!ConvException(defaultAllocator, - "Negative number overflow"); - } - return cast(To) from; -} - -/** - * Performs checked conversion from an integral type $(D_PARAM From) to an - * $(D_KEYWORD enum). - * - * Params: - * From = Source type. - * To = Target type. - * from = Source value. - * - * Returns: $(D_KEYWORD enum) value. - * - * Throws: $(D_PSYMBOL ConvException) if $(D_PARAM from) is not a member of - * $(D_PSYMBOL To). - */ -deprecated("Use tanya.conv.to instead") -To to(To, From)(From from) -if (isIntegral!From && is(To == enum)) -{ - foreach (m; EnumMembers!To) - { - if (from == m) - { - return m; - } - } - throw make!ConvException(defaultAllocator, - "Value not found in enum '" ~ To.stringof ~ "'"); -}