mirror of
https://github.com/dlang/phobos.git
synced 2025-05-06 11:07:39 +03:00
This commit is contained in:
parent
2c8d824173
commit
6462d38a07
2 changed files with 94 additions and 3 deletions
|
@ -3225,6 +3225,35 @@ unittest {
|
|||
assert(skipOver(s1, "Hell") && s1 == "o world");
|
||||
}
|
||||
|
||||
/* (Not yet documented.)
|
||||
Consume all elements from $(D r) that are equal to one of the elements
|
||||
$(D es).
|
||||
*/
|
||||
void skipAll(alias pred = "a == b", R, Es...)(ref R r, Es es)
|
||||
//if (is(typeof(binaryFun!pred(r1.front, es[0]))))
|
||||
{
|
||||
loop:
|
||||
for (; !r.empty; r.popFront())
|
||||
{
|
||||
foreach (i, E; Es)
|
||||
{
|
||||
if (binaryFun!pred(r.front, es[i]))
|
||||
{
|
||||
continue loop;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
unittest
|
||||
{
|
||||
//scope(success) writeln("unittest @", __FILE__, ":", __LINE__, " done.");
|
||||
auto s1 = "Hello world";
|
||||
skipAll(s1, 'H', 'e');
|
||||
assert(s1 == "llo world");
|
||||
}
|
||||
|
||||
/**
|
||||
The reciprocal of $(D startsWith).
|
||||
|
||||
|
|
68
std/conv.d
68
std/conv.d
|
@ -734,7 +734,8 @@ private T parseString(T)(const(char)[] v)
|
|||
Array-to-array conversion (except when target is a string type)
|
||||
converts each element in turn by using $(D to).
|
||||
*/
|
||||
T toImpl(T, S)(S src) if (isDynamicArray!(S) && isArray!(T) && !isSomeString!(T)
|
||||
T toImpl(T, S)(S src) if (isDynamicArray!(S) && isArray!(T)
|
||||
&& !isSomeString!(S) && !isSomeString!(T)
|
||||
&& !implicitlyConverts!(S, T))
|
||||
{
|
||||
alias typeof(T.init[0]) E;
|
||||
|
@ -1269,10 +1270,10 @@ unittest
|
|||
Target parse(Target, Source)(ref Source p)
|
||||
if (isInputRange!Source && /*!isSomeString!Source && */isFloatingPoint!Target)
|
||||
{
|
||||
static immutable real negtab[] =
|
||||
static immutable real negtab[14] =
|
||||
[ 1e-4096L,1e-2048L,1e-1024L,1e-512L,1e-256L,1e-128L,1e-64L,1e-32L,
|
||||
1e-16L,1e-8L,1e-4L,1e-2L,1e-1L,1.0L ];
|
||||
static immutable real postab[] =
|
||||
static immutable real postab[13] =
|
||||
[ 1e+4096L,1e+2048L,1e+1024L,1e+512L,1e+256L,1e+128L,1e+64L,1e+32L,
|
||||
1e+16L,1e+8L,1e+4L,1e+2L,1e+1L ];
|
||||
// static immutable string infinity = "infinity";
|
||||
|
@ -1684,6 +1685,67 @@ if (isSomeString!Source && is(Target == typedef))
|
|||
static assert(0);
|
||||
}
|
||||
|
||||
private void skipWS(R)(ref R r)
|
||||
{
|
||||
skipAll(r, ' ', '\n', '\t', '\r');
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses an array from a string given the left bracket (default $(D
|
||||
* '[')), right bracket (default $(D ']')), and element seprator (by
|
||||
* default $(D ',')).
|
||||
*/
|
||||
Target parse(Target, Source)(ref Source s, dchar lbracket = '[', dchar rbracket = ']', dchar comma = ',')
|
||||
if (isSomeString!Source && isDynamicArray!Target && !isSomeString!Target)
|
||||
{
|
||||
Target result;
|
||||
skipWS(s);
|
||||
if (s.front != lbracket) return result;
|
||||
s.popFront();
|
||||
skipWS(s);
|
||||
if (s.front == rbracket)
|
||||
{
|
||||
s.popFront();
|
||||
return result;
|
||||
}
|
||||
for (;; s.popFront(), skipWS(s))
|
||||
{
|
||||
result ~= parse!(ElementType!Target)(s);
|
||||
skipWS(s);
|
||||
if (s.front != comma) break;
|
||||
}
|
||||
if (s.front == rbracket)
|
||||
{
|
||||
s.popFront();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
unittest
|
||||
{
|
||||
int[] a = [1, 2, 3, 4, 5];
|
||||
auto s = to!string(a);
|
||||
assert(to!(int[])(s) == a);
|
||||
}
|
||||
|
||||
unittest
|
||||
{
|
||||
int[][] a = [ [1, 2] , [3], [4, 5] ];
|
||||
auto s = to!string(a);
|
||||
//assert(to!(int[][])(s) == a);
|
||||
}
|
||||
|
||||
unittest
|
||||
{
|
||||
int[][][] ia = [ [[1,2],[3,4],[5]] , [[6],[],[7,8,9]] , [[]] ];
|
||||
|
||||
char[] s = to!(char[])(ia);
|
||||
int[][][] ia2;
|
||||
|
||||
ia2 = to!(typeof(ia2))(s);
|
||||
assert( ia == ia2);
|
||||
}
|
||||
|
||||
// Customizable integral parse
|
||||
|
||||
// private N parseIntegral(S, N)(ref S s)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue