Mercurial > projects > orange
comparison orange/core/string.d @ 27:fc315d786f24 experimental
Added unit testing.
author | Jacob Carlborg <doob@me.com> |
---|---|
date | Fri, 19 Nov 2010 11:14:55 +0100 |
parents | 78e5fef4bbf2 |
children | 068e853b9c07 |
comparison
equal
deleted
inserted
replaced
26:78e5fef4bbf2 | 27:fc315d786f24 |
---|---|
45 alias std.string.toStringz toStringz; | 45 alias std.string.toStringz toStringz; |
46 alias std.utf.toUTF16z toString16z; | 46 alias std.utf.toUTF16z toString16z; |
47 | 47 |
48 alias std.string.toString fromStringz; | 48 alias std.string.toString fromStringz; |
49 } | 49 } |
50 | |
51 import orange.util.Traits; | |
50 | 52 |
51 version (Tango) | 53 version (Tango) |
52 { | 54 { |
53 /** | 55 /** |
54 * string alias | 56 * string alias |
884 ++i; | 886 ++i; |
885 | 887 |
886 return i; | 888 return i; |
887 } | 889 } |
888 } | 890 } |
891 | |
892 T[] replace (T) (T[] source, dchar match, dchar replacement) | |
893 { | |
894 static assert(isChar!(T), `The type "` ~ T.stringof ~ `" is not a valid type for this function only strings are accepted`); | |
895 | |
896 dchar endOfCodeRange; | |
897 | |
898 static if (is(T == wchar)) | |
899 { | |
900 const encodedLength = 2; | |
901 endOfCodeRange = wchar.init; | |
902 } | |
903 | |
904 else static if (is(T == char)) | |
905 { | |
906 const encodedLength = 4; | |
907 endOfCodeRange = '\x7F'; | |
908 } | |
909 | |
910 if (replacement <= endOfCodeRange && match <= endOfCodeRange) | |
911 { | |
912 foreach (ref c ; source) | |
913 if (c == match) | |
914 c = replacement; | |
915 | |
916 return source; | |
917 } | |
918 | |
919 else | |
920 { | |
921 static if (!is(T == dchar)) | |
922 { | |
923 T[encodedLength] encodedMatch; | |
924 T[encodedLength] encodedReplacement; | |
925 | |
926 version (Tango) | |
927 return source.substitute(encode(encodedMatch, match), encode(encodedReplacement, replacement)); | |
928 | |
929 else | |
930 { | |
931 auto matchLength = encode(encodedMatch, match); | |
932 auto replacementLength = encode(encodedReplacement, replacement); | |
933 | |
934 return std.string.replace(source, encodedMatch[0 .. matchLength], encodedReplacement[0 .. replacementLength]); | |
935 } | |
936 } | |
937 } | |
938 | |
939 return source; | |
940 } |