Skip to content
This repository has been archived by the owner on Oct 12, 2022. It is now read-only.

Commit

Permalink
simplify rt.util.string
Browse files Browse the repository at this point in the history
  • Loading branch information
WalterBright committed Jun 30, 2015
1 parent baface5 commit ab315c1
Show file tree
Hide file tree
Showing 14 changed files with 83 additions and 96 deletions.
1 change: 1 addition & 0 deletions mak/COPY
Expand Up @@ -16,6 +16,7 @@ COPY=\
\
$(IMPDIR)\core\internal\convert.d \
$(IMPDIR)\core\internal\hash.d \
$(IMPDIR)\core\internal\string.d \
$(IMPDIR)\core\internal\traits.d \
\
$(IMPDIR)\core\stdc\complex.d \
Expand Down
2 changes: 1 addition & 1 deletion mak/MANIFEST
Expand Up @@ -34,6 +34,7 @@ MANIFEST=\
\
src\core\internal\convert.d \
src\core\internal\hash.d \
src\core\internal\string.d \
src\core\internal\traits.d \
\
src\core\stdc\complex.d \
Expand Down Expand Up @@ -245,7 +246,6 @@ MANIFEST=\
src\rt\util\array.d \
src\rt\util\hash.d \
src\rt\util\random.d \
src\rt\util\string.d \
src\rt\util\typeinfo.d \
src\rt\util\utf.d \
src\rt\util\container\array.d \
Expand Down
2 changes: 1 addition & 1 deletion mak/SRCS
Expand Up @@ -17,6 +17,7 @@ SRCS=\
\
src\core\internal\convert.d \
src\core\internal\hash.d \
src\core\internal\string.d \
src\core\internal\traits.d \
\
src\core\stdc\config.d \
Expand Down Expand Up @@ -130,7 +131,6 @@ SRCS=\
src\rt\util\array.d \
src\rt\util\hash.d \
src\rt\util\random.d \
src\rt\util\string.d \
src\rt\util\typeinfo.d \
src\rt\util\utf.d \
src\rt\util\container\array.d \
Expand Down
57 changes: 57 additions & 0 deletions src/core/internal/string.d
@@ -0,0 +1,57 @@
/**
* String manipulation and comparison utilities.
*
* Copyright: Copyright Sean Kelly 2005 - 2009.
* License: $(WEB www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
* Authors: Sean Kelly, Walter Bright
* Source: $(DRUNTIMESRC src/rt/util/_string.d)
*/

module core.internal.string;

pure:
nothrow:
@nogc:

alias UnsignedStringBuf = char[20];

char[] unsignedToTempString(ulong value, char[] buf, uint radix) @safe
{
size_t i = buf.length;
do
{
ubyte x = cast(ubyte)(value % radix);
value = value / radix;
buf[--i] = cast(char)((x < 10) ? x + '0' : x - 10 + 'a');
} while (value);
return buf[i .. $];
}

unittest
{
UnsignedStringBuf buf;
assert(0.unsignedToTempString(buf, 10) == "0");
assert(1.unsignedToTempString(buf, 10) == "1");
assert(12.unsignedToTempString(buf, 10) == "12");
assert(0x12ABCF .unsignedToTempString(buf, 16) == "12abcf");
assert(long.sizeof.unsignedToTempString(buf, 10) == "8");
assert(uint.max.unsignedToTempString(buf, 10) == "4294967295");
assert(ulong.max.unsignedToTempString(buf, 10) == "18446744073709551615");
}


int dstrcmp( in char[] s1, in char[] s2 ) @trusted
{
import core.stdc.string : memcmp;

int ret = 0;
auto len = s1.length;
if( s2.length < len )
len = s2.length;
if( 0 != (ret = memcmp( s1.ptr, s2.ptr, len )) )
return ret;
return s1.length > s2.length ? 1 :
s1.length == s2.length ? 0 : -1;
}


16 changes: 8 additions & 8 deletions src/object.d
Expand Up @@ -232,8 +232,8 @@ class TypeInfo
override int opCmp(Object o)
{
import core.internal.traits : externDFunc;
alias dstrcmp = externDFunc!("rt.util.string.dstrcmp",
int function(in char[] s1, in char[] s2) @trusted pure nothrow);
alias dstrcmp = externDFunc!("core.internal.string.dstrcmp",
int function(in char[] s1, in char[] s2) @trusted pure nothrow @nogc);

if (this is o)
return 0;
Expand Down Expand Up @@ -500,11 +500,11 @@ class TypeInfo_StaticArray : TypeInfo
override string toString() const
{
import core.internal.traits : externDFunc;
alias sizeToTempString = externDFunc!("rt.util.string.sizeToTempString",
char[] function(in size_t, char[]) @trusted pure nothrow);
alias sizeToTempString = externDFunc!("core.internal.string.unsignedToTempString",
char[] function(ulong, char[], uint) @safe pure nothrow @nogc);

char[20] tmpBuff = void;
return value.toString() ~ "[" ~ sizeToTempString(len, tmpBuff) ~ "]";
return value.toString() ~ "[" ~ sizeToTempString(len, tmpBuff, 10) ~ "]";
}

override bool opEquals(Object o)
Expand Down Expand Up @@ -1562,14 +1562,14 @@ class Throwable : Object
void toString(scope void delegate(in char[]) sink) const
{
import core.internal.traits : externDFunc;
alias sizeToTempString = externDFunc!("rt.util.string.sizeToTempString",
char[] function(in size_t, char[]) @trusted pure nothrow);
alias sizeToTempString = externDFunc!("core.internal.string.unsignedToTempString",
char[] function(ulong, char[], uint) @safe pure nothrow @nogc);

char[20] tmpBuff = void;

sink(typeid(this).name);
sink("@"); sink(file);
sink("("); sink(sizeToTempString(line, tmpBuff)); sink(")");
sink("("); sink(sizeToTempString(line, tmpBuff, 10)); sink(")");

if (msg.length)
{
Expand Down
1 change: 0 additions & 1 deletion src/rt/arrayassign.d
Expand Up @@ -16,7 +16,6 @@ module rt.arrayassign;
private
{
import rt.util.array;
import rt.util.string;
import core.stdc.string;
import core.stdc.stdlib;
debug(PRINTF) import core.stdc.stdio;
Expand Down
1 change: 0 additions & 1 deletion src/rt/arraycat.d
Expand Up @@ -17,7 +17,6 @@ private
{
import core.stdc.string;
import rt.util.array;
import rt.util.string;
debug(PRINTF) import core.stdc.stdio;
}

Expand Down
1 change: 0 additions & 1 deletion src/rt/dmain2.d
Expand Up @@ -15,7 +15,6 @@ private
{
import rt.memory;
import rt.sections;
import rt.util.string;
import core.atomic;
import core.stdc.stddef;
import core.stdc.stdlib;
Expand Down
2 changes: 1 addition & 1 deletion src/rt/trace.d
Expand Up @@ -18,7 +18,7 @@ private
import core.stdc.stdio;
import core.stdc.stdlib;
import core.stdc.string;
import rt.util.string;
import core.internal.string;

version (CRuntime_Microsoft)
alias core.stdc.stdlib._strtoui64 strtoull;
Expand Down
2 changes: 1 addition & 1 deletion src/rt/typeinfo/ti_Ag.d
Expand Up @@ -15,7 +15,7 @@ module rt.typeinfo.ti_Ag;

private import core.stdc.string;
private import rt.util.hash;
private import rt.util.string;
private import core.internal.string;

// byte[]

Expand Down
14 changes: 7 additions & 7 deletions src/rt/util/array.d
Expand Up @@ -9,7 +9,7 @@ Source: $(DRUNTIMESRC src/rt/util/_array.d)
module rt.util.array;


import rt.util.string;
import core.internal.string;


@safe /* pure dmd @@@BUG11461@@@ */ nothrow:
Expand All @@ -36,13 +36,13 @@ private void _enforceSameLength(in char[] action,
if(length1 == length2)
return;

SizeStringBuff tmpBuff = void;
UnsignedStringBuf tmpBuff = void;
string msg = "Array lengths don't match for ";
msg ~= action;
msg ~= ": ";
msg ~= length1.sizeToTempString(tmpBuff);
msg ~= length1.unsignedToTempString(tmpBuff, 10);
msg ~= " != ";
msg ~= length2.sizeToTempString(tmpBuff);
msg ~= length2.unsignedToTempString(tmpBuff, 10);
throw new Error(msg);
}

Expand All @@ -54,12 +54,12 @@ private void _enforceNoOverlap(in char[] action,
return;
const overlappedBytes = bytes - d;

SizeStringBuff tmpBuff = void;
UnsignedStringBuf tmpBuff = void;
string msg = "Overlapping arrays in ";
msg ~= action;
msg ~= ": ";
msg ~= overlappedBytes.sizeToTempString(tmpBuff);
msg ~= overlappedBytes.unsignedToTempString(tmpBuff, 10);
msg ~= " byte(s) overlap of ";
msg ~= bytes.sizeToTempString(tmpBuff);
msg ~= bytes.unsignedToTempString(tmpBuff, 10);
throw new Error(msg);
}
74 changes: 0 additions & 74 deletions src/rt/util/string.d

This file was deleted.

3 changes: 3 additions & 0 deletions win32.mak
Expand Up @@ -256,6 +256,9 @@ $(IMPDIR)\core\internal\convert.d : src\core\internal\convert.d
$(IMPDIR)\core\internal\hash.d : src\core\internal\hash.d
copy $** $@

$(IMPDIR)\core\internal\string.d : src\core\internal\string.d
copy $** $@

$(IMPDIR)\core\internal\traits.d : src\core\internal\traits.d
copy $** $@

Expand Down
3 changes: 3 additions & 0 deletions win64.mak
Expand Up @@ -266,6 +266,9 @@ $(IMPDIR)\core\internal\convert.d : src\core\internal\convert.d
$(IMPDIR)\core\internal\hash.d : src\core\internal\hash.d
copy $** $@

$(IMPDIR)\core\internal\string.d : src\core\internal\string.d
copy $** $@

$(IMPDIR)\core\internal\traits.d : src\core\internal\traits.d
copy $** $@

Expand Down

0 comments on commit ab315c1

Please sign in to comment.