mirror of
https://github.com/dlang/phobos.git
synced 2025-04-27 13:40:20 +03:00
Strict @property syntax compliance.
This enables the test suite to build with the -property switch enabled. std.cpuid: vendor()/processor() have not been converted to properties in accordance to core.cpuid. std.xml: Element.text() cannot be a property due to the optional parameter.
This commit is contained in:
parent
0eddab60b9
commit
e312f9898b
33 changed files with 603 additions and 593 deletions
200
std/algorithm.d
200
std/algorithm.d
|
@ -492,9 +492,9 @@ unittest
|
|||
assert(squares2.back == 16);
|
||||
|
||||
assert(squares2.front == 1);
|
||||
squares2.popFront;
|
||||
squares2.popFront();
|
||||
assert(squares2.front == 4);
|
||||
squares2.popBack;
|
||||
squares2.popBack();
|
||||
assert(squares2.front == 4);
|
||||
assert(squares2.back == 9);
|
||||
|
||||
|
@ -527,10 +527,10 @@ unittest
|
|||
// stuff is disabled.
|
||||
auto fibsSquares = map!"a * a"(recurrence!("a[n-1] + a[n-2]")(1, 1));
|
||||
assert(fibsSquares.front == 1);
|
||||
fibsSquares.popFront;
|
||||
fibsSquares.popFront;
|
||||
fibsSquares.popFront();
|
||||
fibsSquares.popFront();
|
||||
assert(fibsSquares.front == 4);
|
||||
fibsSquares.popFront;
|
||||
fibsSquares.popFront();
|
||||
assert(fibsSquares.front == 9);
|
||||
|
||||
auto repeatMap = map!"a"(repeat(1));
|
||||
|
@ -641,7 +641,7 @@ template reduce(fun...) if (fun.length >= 1)
|
|||
alias args[0] seed;
|
||||
alias args[1] r;
|
||||
Unqual!(Args[0]) result = seed;
|
||||
for (; !r.empty; r.popFront)
|
||||
for (; !r.empty; r.popFront())
|
||||
{
|
||||
static if (fun.length == 1)
|
||||
{
|
||||
|
@ -849,7 +849,7 @@ if (isForwardRange!Range && is(typeof(range.front = filler)))
|
|||
alias ElementType!Range T;
|
||||
static if (hasElaborateCopyConstructor!T || !isDynamicArray!Range)
|
||||
{
|
||||
for (; !range.empty; range.popFront)
|
||||
for (; !range.empty; range.popFront())
|
||||
{
|
||||
range.front = filler;
|
||||
}
|
||||
|
@ -912,7 +912,7 @@ if (isForwardRange!Range1 && isForwardRange!Range2
|
|||
{
|
||||
enforce(!filler.empty);
|
||||
auto t = filler.save;
|
||||
for (; !range.empty; range.popFront, t.popFront)
|
||||
for (; !range.empty; range.popFront(), t.popFront())
|
||||
{
|
||||
if (t.empty) t = filler;
|
||||
range.front = t.front;
|
||||
|
@ -950,7 +950,7 @@ if (isForwardRange!Range && is(typeof(range.front = filler)))
|
|||
static if (hasElaborateCopyConstructor!T)
|
||||
{
|
||||
// Must construct stuff by the book
|
||||
for (; !range.empty; range.popFront)
|
||||
for (; !range.empty; range.popFront())
|
||||
{
|
||||
emplace(&range.front, filler);
|
||||
}
|
||||
|
@ -1006,7 +1006,7 @@ if (isForwardRange!Range && is(typeof(range.front = range.front)))
|
|||
static if (is(typeof(&(range.front()))))
|
||||
{
|
||||
// Range exposes references
|
||||
for (; !range.empty; range.popFront)
|
||||
for (; !range.empty; range.popFront())
|
||||
{
|
||||
memcpy(&(range.front()), &T.init, T.sizeof);
|
||||
}
|
||||
|
@ -1014,7 +1014,7 @@ if (isForwardRange!Range && is(typeof(range.front = range.front)))
|
|||
else
|
||||
{
|
||||
// Go the slow route
|
||||
for (; !range.empty; range.popFront)
|
||||
for (; !range.empty; range.popFront())
|
||||
{
|
||||
range.front = filler;
|
||||
}
|
||||
|
@ -1104,7 +1104,7 @@ template filter(alias pred) if (is(typeof(unaryFun!pred)))
|
|||
{
|
||||
do
|
||||
{
|
||||
_input.popFront;
|
||||
_input.popFront();
|
||||
} while (!_input.empty && !unaryFun!pred(_input.front));
|
||||
}
|
||||
|
||||
|
@ -1258,7 +1258,7 @@ template filterBidirectional(alias pred)
|
|||
{
|
||||
do
|
||||
{
|
||||
_input.popFront;
|
||||
_input.popFront();
|
||||
} while (!_input.empty && !predFun(_input.front));
|
||||
}
|
||||
|
||||
|
@ -1271,7 +1271,7 @@ template filterBidirectional(alias pred)
|
|||
{
|
||||
do
|
||||
{
|
||||
_input.popBack;
|
||||
_input.popBack();
|
||||
} while (!_input.empty && !predFun(_input.back));
|
||||
}
|
||||
|
||||
|
@ -1422,7 +1422,7 @@ Range2 moveAll(Range1, Range2)(Range1 src, Range2 tgt)
|
|||
if (isInputRange!Range1 && isInputRange!Range2
|
||||
&& is(typeof(move(src.front, tgt.front))))
|
||||
{
|
||||
for (; !src.empty; src.popFront, tgt.popFront)
|
||||
for (; !src.empty; src.popFront(), tgt.popFront())
|
||||
{
|
||||
enforce(!tgt.empty);
|
||||
move(src.front, tgt.front);
|
||||
|
@ -1452,7 +1452,7 @@ Tuple!(Range1, Range2) moveSome(Range1, Range2)(Range1 src, Range2 tgt)
|
|||
if (isInputRange!Range1 && isInputRange!Range2
|
||||
&& is(typeof(move(src.front, tgt.front))))
|
||||
{
|
||||
for (; !src.empty && !tgt.empty; src.popFront, tgt.popFront)
|
||||
for (; !src.empty && !tgt.empty; src.popFront(), tgt.popFront())
|
||||
{
|
||||
enforce(!tgt.empty);
|
||||
move(src.front, tgt.front);
|
||||
|
@ -1859,7 +1859,7 @@ if (is(typeof(Range.init.front == Separator.init.front) : bool))
|
|||
static if (isBidirectionalRange!Range)
|
||||
RIndexType _backLength = RIndexType.max;
|
||||
|
||||
auto separatorLength() { return _separator.length; }
|
||||
@property auto separatorLength() { return _separator.length; }
|
||||
|
||||
void ensureFrontLength()
|
||||
{
|
||||
|
@ -1913,7 +1913,7 @@ if (is(typeof(Range.init.front == Separator.init.front) : bool))
|
|||
void popFront()
|
||||
{
|
||||
assert(!empty);
|
||||
ensureFrontLength;
|
||||
ensureFrontLength();
|
||||
if (_frontLength == _input.length)
|
||||
{
|
||||
// done, there's no separator in sight
|
||||
|
@ -1955,13 +1955,13 @@ if (is(typeof(Range.init.front == Separator.init.front) : bool))
|
|||
{
|
||||
@property Range back()
|
||||
{
|
||||
ensureBackLength;
|
||||
ensureBackLength();
|
||||
return _input[_input.length - _backLength .. _input.length];
|
||||
}
|
||||
|
||||
void popBack()
|
||||
{
|
||||
ensureBackLength;
|
||||
ensureBackLength();
|
||||
if (_backLength == _input.length)
|
||||
{
|
||||
// done
|
||||
|
@ -2482,7 +2482,7 @@ if (isInputRange!Range && is(typeof(binaryFun!pred(r.front, r.front)) == bool))
|
|||
auto last = _input.front;
|
||||
do
|
||||
{
|
||||
_input.popFront;
|
||||
_input.popFront();
|
||||
}
|
||||
while (!_input.empty && binaryFun!(pred)(last, _input.front));
|
||||
}
|
||||
|
@ -2496,7 +2496,7 @@ if (isInputRange!Range && is(typeof(binaryFun!pred(r.front, r.front)) == bool))
|
|||
auto last = _input.back;
|
||||
do
|
||||
{
|
||||
_input.popBack;
|
||||
_input.popBack();
|
||||
}
|
||||
while (!_input.empty && binaryFun!pred(last, _input.back));
|
||||
}
|
||||
|
@ -2575,7 +2575,7 @@ struct Group(alias pred, R) if (isInputRange!R)
|
|||
this(R input)
|
||||
{
|
||||
_input = input;
|
||||
if (!_input.empty) popFront;
|
||||
if (!_input.empty) popFront();
|
||||
}
|
||||
|
||||
void popFront()
|
||||
|
@ -2587,11 +2587,11 @@ struct Group(alias pred, R) if (isInputRange!R)
|
|||
else
|
||||
{
|
||||
_current = tuple(_input.front, 1u);
|
||||
_input.popFront;
|
||||
_input.popFront();
|
||||
while (!_input.empty && comp(_current[0], _input.front))
|
||||
{
|
||||
++_current[1];
|
||||
_input.popFront;
|
||||
_input.popFront();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2680,12 +2680,12 @@ assert(r == [ 1, 2, 3, 4, 5 ]);
|
|||
// //auto target = begin(r), e = end(r);
|
||||
// auto target = r;
|
||||
// auto source = r;
|
||||
// source.popFront;
|
||||
// source.popFront();
|
||||
// while (!source.empty)
|
||||
// {
|
||||
// if (!pred(target.front, source.front))
|
||||
// {
|
||||
// target.popFront;
|
||||
// target.popFront();
|
||||
// continue;
|
||||
// }
|
||||
// // found an equal *source and *target
|
||||
|
@ -2694,9 +2694,9 @@ assert(r == [ 1, 2, 3, 4, 5 ]);
|
|||
// //@@@
|
||||
// //move(source.front, target.front);
|
||||
// target[0] = source[0];
|
||||
// source.popFront;
|
||||
// source.popFront();
|
||||
// if (source.empty) break;
|
||||
// if (!pred(target.front, source.front)) target.popFront;
|
||||
// if (!pred(target.front, source.front)) target.popFront();
|
||||
// }
|
||||
// break;
|
||||
// }
|
||||
|
@ -3093,7 +3093,7 @@ Tuple!(Range, size_t) find(alias pred = "a == b", Range, Ranges...)
|
|||
(Range haystack, Ranges needles)
|
||||
if (Ranges.length > 1 && allSatisfy!(isForwardRange, Ranges))
|
||||
{
|
||||
for (;; haystack.popFront)
|
||||
for (;; haystack.popFront())
|
||||
{
|
||||
size_t r = startsWith!pred(haystack, needles);
|
||||
if (r || haystack.empty)
|
||||
|
@ -3324,7 +3324,7 @@ assert(find!(pred)(arr) == arr);
|
|||
Range find(alias pred, Range)(Range haystack) if (isInputRange!(Range))
|
||||
{
|
||||
alias unaryFun!(pred) predFun;
|
||||
for (; !haystack.empty && !predFun(haystack.front); haystack.popFront)
|
||||
for (; !haystack.empty && !predFun(haystack.front); haystack.popFront())
|
||||
{
|
||||
}
|
||||
return haystack;
|
||||
|
@ -3794,13 +3794,13 @@ struct Until(alias pred, Range, Sentinel) if (isInputRange!Range)
|
|||
_done = true;
|
||||
return;
|
||||
}
|
||||
_input.popFront;
|
||||
_input.popFront();
|
||||
_done = _input.empty;
|
||||
}
|
||||
else
|
||||
{
|
||||
_input.popFront;
|
||||
_done = _input.empty || predSatisfied;
|
||||
_input.popFront();
|
||||
_done = _input.empty || predSatisfied();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4402,7 +4402,7 @@ Range findAdjacent(alias pred = "a == b", Range)(Range r)
|
|||
auto ahead = r;
|
||||
if (!ahead.empty)
|
||||
{
|
||||
for (ahead.popFront; !ahead.empty; r.popFront, ahead.popFront)
|
||||
for (ahead.popFront(); !ahead.empty; r.popFront(), ahead.popFront())
|
||||
{
|
||||
if (binaryFun!(pred)(r.front, ahead.front)) return r;
|
||||
}
|
||||
|
@ -4449,7 +4449,7 @@ Range1 findAmong(alias pred = "a == b", Range1, Range2)(
|
|||
Range1 seq, Range2 choices)
|
||||
if (isInputRange!Range1 && isForwardRange!Range2)
|
||||
{
|
||||
for (; !seq.empty && find!pred(choices, seq.front).empty; seq.popFront)
|
||||
for (; !seq.empty && find!pred(choices, seq.front).empty; seq.popFront())
|
||||
{
|
||||
}
|
||||
return seq;
|
||||
|
@ -4968,7 +4968,7 @@ minCount(alias pred = "a < b", Range)(Range range)
|
|||
if (range.empty) return typeof(return)();
|
||||
auto p = &(range.front());
|
||||
size_t occurrences = 1;
|
||||
for (range.popFront; !range.empty; range.popFront)
|
||||
for (range.popFront(); !range.empty; range.popFront())
|
||||
{
|
||||
if (binaryFun!(pred)(*p, range.front)) continue;
|
||||
if (binaryFun!(pred)(range.front, *p))
|
||||
|
@ -5018,7 +5018,7 @@ Range minPos(alias pred = "a < b", Range)(Range range)
|
|||
{
|
||||
if (range.empty) return range;
|
||||
auto result = range;
|
||||
for (range.popFront; !range.empty; range.popFront)
|
||||
for (range.popFront(); !range.empty; range.popFront())
|
||||
{
|
||||
if (binaryFun!(pred)(result.front, range.front)
|
||||
|| !binaryFun!(pred)(range.front, result.front)) continue;
|
||||
|
@ -5294,7 +5294,7 @@ levenshteinDistanceAndPath(alias equals = "a == b", Range1, Range2)
|
|||
{
|
||||
Levenshtein!(Range1, binaryFun!(equals)) lev;
|
||||
auto d = lev.distance(s, t);
|
||||
return tuple(d, lev.path);
|
||||
return tuple(d, lev.path());
|
||||
}
|
||||
|
||||
unittest
|
||||
|
@ -5429,7 +5429,7 @@ swapRanges(Range1, Range2)(Range1 r1, Range2 r2)
|
|||
&& hasSwappableElements!(Range1) && hasSwappableElements!(Range2)
|
||||
&& is(ElementType!(Range1) == ElementType!(Range2)))
|
||||
{
|
||||
for (; !r1.empty && !r2.empty; r1.popFront, r2.popFront)
|
||||
for (; !r1.empty && !r2.empty; r1.popFront(), r2.popFront())
|
||||
{
|
||||
swap(r1.front, r2.front);
|
||||
}
|
||||
|
@ -5466,9 +5466,9 @@ if (isBidirectionalRange!(Range) && hasSwappableElements!(Range))
|
|||
while (!r.empty)
|
||||
{
|
||||
swap(r.front, r.back);
|
||||
r.popFront;
|
||||
r.popFront();
|
||||
if (r.empty) break;
|
||||
r.popBack;
|
||||
r.popBack();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5874,8 +5874,8 @@ if (isBidirectionalRange!Range && hasLength!Range && s != SwapStrategy.stable
|
|||
foreach (i; 0 .. rid)
|
||||
{
|
||||
move(range.back, t.front);
|
||||
range.popBack;
|
||||
t.popFront;
|
||||
range.popBack();
|
||||
t.popFront();
|
||||
}
|
||||
if (rEnd - rStart == lEnd - lStart)
|
||||
{
|
||||
|
@ -5947,14 +5947,14 @@ if ((isForwardRange!Range && !isBidirectionalRange!Range
|
|||
enum delta = 1;
|
||||
}
|
||||
assert(pos <= from);
|
||||
for (; pos < from; ++pos, src.popFront, tgt.popFront)
|
||||
for (; pos < from; ++pos, src.popFront(), tgt.popFront())
|
||||
{
|
||||
move(src.front, tgt.front);
|
||||
}
|
||||
// now skip source to the "to" position
|
||||
src.popFrontN(delta);
|
||||
pos += delta;
|
||||
foreach (j; 0 .. delta) result.popBack;
|
||||
foreach (j; 0 .. delta) result.popBack();
|
||||
}
|
||||
// leftover move
|
||||
moveAll(src, tgt);
|
||||
|
@ -6023,28 +6023,28 @@ if (isBidirectionalRange!Range)
|
|||
{
|
||||
if (!unaryFun!(pred)(range.front))
|
||||
{
|
||||
range.popFront;
|
||||
range.popFront();
|
||||
continue;
|
||||
}
|
||||
move(range.back, range.front);
|
||||
range.popBack;
|
||||
result.popBack;
|
||||
range.popBack();
|
||||
result.popBack();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
auto tgt = range;
|
||||
for (; !range.empty; range.popFront)
|
||||
for (; !range.empty; range.popFront())
|
||||
{
|
||||
if (unaryFun!(pred)(range.front))
|
||||
{
|
||||
// yank this guy
|
||||
result.popBack;
|
||||
result.popBack();
|
||||
continue;
|
||||
}
|
||||
// keep this guy
|
||||
move(range.front, tgt.front);
|
||||
tgt.popFront;
|
||||
tgt.popFront();
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
@ -6203,7 +6203,7 @@ Range partition(alias predicate,
|
|||
{
|
||||
if (r.length == 1)
|
||||
{
|
||||
if (pred(r.front)) r.popFront;
|
||||
if (pred(r.front)) r.popFront();
|
||||
return r;
|
||||
}
|
||||
const middle = r.length / 2;
|
||||
|
@ -6215,17 +6215,17 @@ Range partition(alias predicate,
|
|||
}
|
||||
else static if (ss == SwapStrategy.semistable)
|
||||
{
|
||||
for (; !r.empty; r.popFront)
|
||||
for (; !r.empty; r.popFront())
|
||||
{
|
||||
// skip the initial portion of "correct" elements
|
||||
if (pred(r.front)) continue;
|
||||
// hit the first "bad" element
|
||||
auto result = r;
|
||||
for (r.popFront; !r.empty; r.popFront)
|
||||
for (r.popFront(); !r.empty; r.popFront())
|
||||
{
|
||||
if (!pred(r.front)) continue;
|
||||
swap(result.front, r.front);
|
||||
result.popFront;
|
||||
result.popFront();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -6242,15 +6242,15 @@ Range partition(alias predicate,
|
|||
{
|
||||
if (r.empty) return result;
|
||||
if (!pred(r.front)) break;
|
||||
r.popFront;
|
||||
result.popFront;
|
||||
r.popFront();
|
||||
result.popFront();
|
||||
}
|
||||
// found the left bound
|
||||
assert(!r.empty);
|
||||
for (;;)
|
||||
{
|
||||
if (pred(r.back)) break;
|
||||
r.popBack;
|
||||
r.popBack();
|
||||
if (r.empty) return result;
|
||||
}
|
||||
// found the right bound, swap & make progress
|
||||
|
@ -6264,9 +6264,9 @@ Range partition(alias predicate,
|
|||
r.front = t2;
|
||||
r.back = t1;
|
||||
}
|
||||
r.popFront;
|
||||
result.popFront;
|
||||
r.popBack;
|
||||
r.popFront();
|
||||
result.popFront();
|
||||
r.popBack();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -6307,7 +6307,7 @@ unittest // partition
|
|||
auto a = rndstuff!(int)();
|
||||
partition!(even)(a);
|
||||
assert(isPartitioned!(even)(a));
|
||||
auto b = rndstuff!(string);
|
||||
auto b = rndstuff!(string)();
|
||||
partition!(`a.length < 5`)(b);
|
||||
assert(isPartitioned!(`a.length < 5`)(b));
|
||||
}
|
||||
|
@ -6325,10 +6325,10 @@ assert(isPartitioned!("a & 1")(r));
|
|||
bool isPartitioned(alias pred, Range)(Range r)
|
||||
if (isForwardRange!(Range))
|
||||
{
|
||||
for (; !r.empty; r.popFront)
|
||||
for (; !r.empty; r.popFront())
|
||||
{
|
||||
if (unaryFun!(pred)(r.front)) continue;
|
||||
for (r.popFront; !r.empty; r.popFront)
|
||||
for (r.popFront(); !r.empty; r.popFront())
|
||||
{
|
||||
if (unaryFun!(pred)(r.front)) return false;
|
||||
}
|
||||
|
@ -6602,7 +6602,7 @@ void topN(alias less = "a < b",
|
|||
static assert(ss == SwapStrategy.unstable,
|
||||
"Stable topN not yet implemented");
|
||||
auto heap = BinaryHeap!Range1(r1);
|
||||
for (; !r2.empty; r2.popFront)
|
||||
for (; !r2.empty; r2.popFront())
|
||||
{
|
||||
heap.conditionalInsert(r2.front);
|
||||
}
|
||||
|
@ -6714,10 +6714,10 @@ unittest
|
|||
//sort!("b - a")(a);
|
||||
//assert(isSorted!(less)(a));
|
||||
|
||||
a = rndstuff!(int);
|
||||
a = rndstuff!(int)();
|
||||
sort(a);
|
||||
assert(isSorted(a));
|
||||
auto b = rndstuff!(string);
|
||||
auto b = rndstuff!(string)();
|
||||
sort!("toLower(a) < toLower(b)")(b);
|
||||
assert(isSorted!("toUpper(a) < toUpper(b)")(b));
|
||||
}
|
||||
|
@ -7251,7 +7251,7 @@ void makeIndex(
|
|||
{
|
||||
// assume collection already ordered
|
||||
size_t i;
|
||||
for (; !r.empty; r.popFront, ++i)
|
||||
for (; !r.empty; r.popFront(), ++i)
|
||||
index[i] = &(r.front);
|
||||
enforce(index.length == i);
|
||||
// sort the index
|
||||
|
@ -7280,16 +7280,16 @@ void makeIndex(
|
|||
static if(I.sizeof < size_t.sizeof)
|
||||
{
|
||||
enforce(r.length <= I.max, "Cannot create an index with " ~
|
||||
"element type " ~ I.stringof ~ " with length " ~
|
||||
"element type " ~ I.stringof ~ " with length " ~
|
||||
to!string(r.length) ~ "."
|
||||
);
|
||||
}
|
||||
|
||||
for(I i = 0; i < r.length; ++i)
|
||||
|
||||
for(I i = 0; i < r.length; ++i)
|
||||
{
|
||||
index[cast(size_t) i] = i;
|
||||
}
|
||||
|
||||
|
||||
// sort the index
|
||||
bool indirectLess(ElementType!(RangeIndex) a, ElementType!(RangeIndex) b)
|
||||
{
|
||||
|
@ -7593,7 +7593,7 @@ unittest
|
|||
}
|
||||
|
||||
// random data
|
||||
auto b = rndstuff!(string);
|
||||
auto b = rndstuff!(string)();
|
||||
auto index = new string*[b.length];
|
||||
partialIndex!("std.uni.toUpper(a) < std.uni.toUpper(b)")(b, index);
|
||||
assert(isSorted!("std.uni.toUpper(*a) < std.uni.toUpper(*b)")(index));
|
||||
|
@ -7672,7 +7672,7 @@ unittest
|
|||
// && *index[2] == "c" && *index[3] == "C");
|
||||
|
||||
// // random data
|
||||
// auto b = rndstuff!(string);
|
||||
// auto b = rndstuff!(string)();
|
||||
// auto index1 = schwartzMakeIndex!(toUpper)(b);
|
||||
// assert(isSorted!("toUpper(*a) < toUpper(*b)")(index1));
|
||||
// }
|
||||
|
@ -7694,7 +7694,7 @@ unittest
|
|||
{
|
||||
debug(std_algorithm) scope(success)
|
||||
writeln("unittest @", __FILE__, ":", __LINE__, " done.");
|
||||
auto a = rndstuff!(int);
|
||||
auto a = rndstuff!(int)();
|
||||
if (a.length)
|
||||
{
|
||||
auto b = a[a.length / 2];
|
||||
|
@ -7883,7 +7883,7 @@ public:
|
|||
if (i < _crt) continue;
|
||||
// found _crt
|
||||
assert(!_r[i].empty);
|
||||
_r[i].popFront;
|
||||
_r[i].popFront();
|
||||
adjustPosition();
|
||||
return;
|
||||
}
|
||||
|
@ -7985,11 +7985,11 @@ private:
|
|||
{
|
||||
if (comp(_input[0].front, _input[1].front))
|
||||
{
|
||||
_input[0].popFront;
|
||||
_input[0].popFront();
|
||||
}
|
||||
else if (comp(_input[1].front, _input[0].front))
|
||||
{
|
||||
_input[1].popFront;
|
||||
_input[1].popFront();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -8003,7 +8003,7 @@ public:
|
|||
{
|
||||
this._input = input;
|
||||
// position to the first element
|
||||
adjustPosition;
|
||||
adjustPosition();
|
||||
}
|
||||
|
||||
@property bool empty()
|
||||
|
@ -8020,9 +8020,9 @@ public:
|
|||
assert(!empty);
|
||||
assert(!comp(_input[0].front, _input[1].front)
|
||||
&& !comp(_input[1].front, _input[0].front));
|
||||
_input[0].popFront;
|
||||
_input[1].popFront;
|
||||
adjustPosition;
|
||||
_input[0].popFront();
|
||||
_input[1].popFront();
|
||||
adjustPosition();
|
||||
}
|
||||
|
||||
@property ElementType front()
|
||||
|
@ -8102,13 +8102,13 @@ private:
|
|||
if (r2.empty || comp(r1.front, r2.front)) break;
|
||||
if (comp(r2.front, r1.front))
|
||||
{
|
||||
r2.popFront;
|
||||
r2.popFront();
|
||||
}
|
||||
else
|
||||
{
|
||||
// both are equal
|
||||
r1.popFront;
|
||||
r2.popFront;
|
||||
r1.popFront();
|
||||
r2.popFront();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8119,13 +8119,13 @@ public:
|
|||
this.r1 = r1;
|
||||
this.r2 = r2;
|
||||
// position to the first element
|
||||
adjustPosition;
|
||||
adjustPosition();
|
||||
}
|
||||
|
||||
void popFront()
|
||||
{
|
||||
r1.popFront;
|
||||
adjustPosition;
|
||||
r1.popFront();
|
||||
adjustPosition();
|
||||
}
|
||||
|
||||
@property ElementType!(R1) front()
|
||||
|
@ -8145,7 +8145,7 @@ public:
|
|||
}
|
||||
}
|
||||
|
||||
bool empty() { return r1.empty; }
|
||||
@property bool empty() { return r1.empty; }
|
||||
}
|
||||
|
||||
/// Ditto
|
||||
|
@ -8198,8 +8198,8 @@ private:
|
|||
break;
|
||||
}
|
||||
// equal, pop both
|
||||
r1.popFront;
|
||||
r2.popFront;
|
||||
r1.popFront();
|
||||
r2.popFront();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -8209,28 +8209,28 @@ public:
|
|||
this.r1 = r1;
|
||||
this.r2 = r2;
|
||||
// position to the first element
|
||||
adjustPosition;
|
||||
adjustPosition();
|
||||
}
|
||||
|
||||
void popFront()
|
||||
{
|
||||
assert(!empty);
|
||||
if (r1.empty) r2.popFront;
|
||||
else if (r2.empty) r1.popFront;
|
||||
if (r1.empty) r2.popFront();
|
||||
else if (r2.empty) r1.popFront();
|
||||
else
|
||||
{
|
||||
// neither is empty
|
||||
if (comp(r1.front, r2.front))
|
||||
{
|
||||
r1.popFront;
|
||||
r1.popFront();
|
||||
}
|
||||
else
|
||||
{
|
||||
assert(comp(r2.front, r1.front));
|
||||
r2.popFront;
|
||||
r2.popFront();
|
||||
}
|
||||
}
|
||||
adjustPosition;
|
||||
adjustPosition();
|
||||
}
|
||||
|
||||
@property ElementType!(R1) front()
|
||||
|
@ -8409,10 +8409,10 @@ struct NWayUnion(alias less, RangeOfRanges)
|
|||
{
|
||||
_heap.removeFront();
|
||||
// let's look at the guy just popped
|
||||
_ror.back.popFront;
|
||||
_ror.back.popFront();
|
||||
if (_ror.back.empty)
|
||||
{
|
||||
_ror.popBack;
|
||||
_ror.popBack();
|
||||
// nothing else to do: the empty range is not in the
|
||||
// heap and not in _ror
|
||||
return;
|
||||
|
|
12
std/array.d
12
std/array.d
|
@ -333,8 +333,8 @@ unittest
|
|||
auto a = [ 1, 2, 3 ];
|
||||
a.popFront();
|
||||
assert(a == [ 2, 3 ]);
|
||||
static assert(!__traits(compiles, popFront!(immutable int[])));
|
||||
static assert(!__traits(compiles, popFront!(void[])));
|
||||
static assert(!__traits(compiles, popFront!(immutable int[])()));
|
||||
static assert(!__traits(compiles, popFront!(void[])()));
|
||||
}
|
||||
|
||||
// Specialization for narrow strings. The necessity of
|
||||
|
@ -1234,7 +1234,7 @@ ElementEncodingType!(ElementType!RoR)[] joinImpl(RoR, R)(RoR ror, R sep)
|
|||
return result;
|
||||
}
|
||||
else
|
||||
return copy(iter, appender!(typeof(return))).data;
|
||||
return copy(iter, appender!(typeof(return))()).data;
|
||||
}
|
||||
|
||||
ElementEncodingType!(ElementType!RoR)[] joinImpl(RoR, R)(RoR ror, R sep)
|
||||
|
@ -1326,7 +1326,7 @@ ElementEncodingType!(ElementType!RoR)[] joinImpl(RoR)(RoR ror)
|
|||
return cast(typeof(return)) result;
|
||||
}
|
||||
else
|
||||
return copy(iter, appender!(typeof(return))).data;
|
||||
return copy(iter, appender!(typeof(return))()).data;
|
||||
}
|
||||
|
||||
ElementEncodingType!(ElementType!RoR)[] joinImpl(RoR)(RoR ror)
|
||||
|
@ -2291,7 +2291,7 @@ struct SimpleSlice(T)
|
|||
foreach (p; _b .. _e)
|
||||
{
|
||||
*p = anotherSlice.front;
|
||||
anotherSlice.popFront;
|
||||
anotherSlice.popFront();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2437,7 +2437,7 @@ struct SimpleSliceLvalue(T)
|
|||
foreach (p; _b .. _e)
|
||||
{
|
||||
*p = anotherSlice.front;
|
||||
anotherSlice.popFront;
|
||||
anotherSlice.popFront();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1518,7 +1518,7 @@ unittest
|
|||
auto f = File("testingEncoder");
|
||||
scope(exit)
|
||||
{
|
||||
f.close;
|
||||
f.close();
|
||||
assert(!f.isOpen);
|
||||
std.file.remove("testingEncoder");
|
||||
}
|
||||
|
@ -1537,7 +1537,7 @@ unittest
|
|||
auto f = File("testingDecoder");
|
||||
scope(exit)
|
||||
{
|
||||
f.close;
|
||||
f.close();
|
||||
assert(!f.isOpen);
|
||||
std.file.remove("testingDecoder");
|
||||
}
|
||||
|
|
|
@ -87,7 +87,7 @@ private
|
|||
data = Tuple!(T)( vals );
|
||||
}
|
||||
|
||||
auto convertsTo(T...)()
|
||||
@property auto convertsTo(T...)()
|
||||
{
|
||||
static if( T.length == 1 )
|
||||
return is( T[0] == Variant ) ||
|
||||
|
@ -96,7 +96,7 @@ private
|
|||
return data.convertsTo!(Tuple!(T));
|
||||
}
|
||||
|
||||
auto get(T...)()
|
||||
@property auto get(T...)()
|
||||
{
|
||||
static if( T.length == 1 )
|
||||
{
|
||||
|
@ -1292,7 +1292,7 @@ private
|
|||
/*
|
||||
*
|
||||
*/
|
||||
bool empty()
|
||||
@property bool empty()
|
||||
{
|
||||
return m_first is null;
|
||||
}
|
||||
|
|
|
@ -941,7 +941,7 @@ Defines the container's primary range, which embodies a forward range.
|
|||
private Node * _head;
|
||||
private this(Node * p) { _head = p; }
|
||||
/// Forward range primitives.
|
||||
bool empty() const { return !_head; }
|
||||
@property bool empty() const { return !_head; }
|
||||
/// ditto
|
||||
@property Range save() { return this; }
|
||||
/// ditto
|
||||
|
@ -2561,7 +2561,7 @@ the heap work incorrectly.
|
|||
this.percolateDown(_store, i, _length);
|
||||
if (i-- == 0) break;
|
||||
}
|
||||
assertValid;
|
||||
assertValid();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2573,7 +2573,7 @@ heap.
|
|||
_payload.RefCounted.ensureInitialized();
|
||||
_store() = s;
|
||||
_length() = min(_store.length, initialSize);
|
||||
assertValid;
|
||||
assertValid();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2736,7 +2736,7 @@ Replaces the largest element in the store with $(D value).
|
|||
assert(!empty);
|
||||
_store.front = value;
|
||||
percolateDown(_store, 0, _length);
|
||||
assertValid;
|
||||
assertValid();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2760,7 +2760,7 @@ must be collected.
|
|||
if (!comp(value, _store.front)) return false; // value >= largest
|
||||
_store.front = value;
|
||||
percolateDown(_store, 0, _length);
|
||||
assertValid;
|
||||
assertValid();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -2817,7 +2817,7 @@ struct Array(T) if (is(T == bool))
|
|||
Data;
|
||||
private RefCounted!(Data, RefCountedAutoInitialize.no) _store;
|
||||
|
||||
private ref size_t[] data()
|
||||
private @property ref size_t[] data()
|
||||
{
|
||||
assert(_store.RefCounted.isInitialized);
|
||||
return _store._backend._payload;
|
||||
|
|
16
std/conv.d
16
std/conv.d
|
@ -937,7 +937,7 @@ T toImpl(T, S)(S s, in T nullstr)
|
|||
|
||||
if (!s)
|
||||
return nullstr;
|
||||
return to!T(s.toString);
|
||||
return to!T(s.toString());
|
||||
}
|
||||
|
||||
unittest
|
||||
|
@ -1507,7 +1507,7 @@ unittest
|
|||
{
|
||||
foreach (Floating; AllFloats)
|
||||
{
|
||||
testFloatingToIntegral!(Floating, Integral);
|
||||
testFloatingToIntegral!(Floating, Integral)();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1517,7 +1517,7 @@ unittest
|
|||
{
|
||||
foreach (Floating; AllFloats)
|
||||
{
|
||||
testIntegralToFloating!(Integral, Floating);
|
||||
testIntegralToFloating!(Integral, Floating)();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3049,28 +3049,28 @@ enum y = octal!160;
|
|||
auto z = octal!"1_000_000u";
|
||||
----
|
||||
*/
|
||||
int octal(string num)()
|
||||
@property int octal(string num)()
|
||||
if((octalFitsInInt!(num) && !literalIsLong!(num)) && !literalIsUnsigned!(num))
|
||||
{
|
||||
return octal!(int, num);
|
||||
}
|
||||
|
||||
/// Ditto
|
||||
long octal(string num)()
|
||||
@property long octal(string num)()
|
||||
if((!octalFitsInInt!(num) || literalIsLong!(num)) && !literalIsUnsigned!(num))
|
||||
{
|
||||
return octal!(long, num);
|
||||
}
|
||||
|
||||
/// Ditto
|
||||
uint octal(string num)()
|
||||
@property uint octal(string num)()
|
||||
if((octalFitsInInt!(num) && !literalIsLong!(num)) && literalIsUnsigned!(num))
|
||||
{
|
||||
return octal!(int, num);
|
||||
}
|
||||
|
||||
/// Ditto
|
||||
ulong octal(string num)()
|
||||
@property ulong octal(string num)()
|
||||
if((!octalFitsInInt!(num) || literalIsLong!(num)) && literalIsUnsigned!(num))
|
||||
{
|
||||
return octal!(long, num);
|
||||
|
@ -3093,7 +3093,7 @@ template octal(alias s)
|
|||
|
||||
assert(a == 8);
|
||||
*/
|
||||
T octal(T, string num)()
|
||||
@property T octal(T, string num)()
|
||||
if (isOctalLiteral!num)
|
||||
{
|
||||
ulong pow = 1;
|
||||
|
|
10
std/cpuid.d
10
std/cpuid.d
|
@ -69,8 +69,8 @@ version(D_InlineAsm_X86)
|
|||
if (hyperThreading) feats ~= "HTT";
|
||||
|
||||
return format(
|
||||
"Vendor string: %s\n", vendor,
|
||||
"Processor string: %s\n", processor,
|
||||
"Vendor string: %s\n", vendor(),
|
||||
"Processor string: %s\n", processor(),
|
||||
"Signature: Family=%d Model=%d Stepping=%d\n", family, model, stepping,
|
||||
"Features: %s\n", feats,
|
||||
"Multithreading: %d threads / %d cores\n", threadsPerCPU, coresPerCPU);
|
||||
|
@ -114,6 +114,8 @@ version(D_InlineAsm_X86)
|
|||
/// Returns number of cores in CPU
|
||||
alias core.cpuid.coresPerCPU coresPerCPU;
|
||||
|
||||
@property
|
||||
{
|
||||
/// Is this an Intel processor?
|
||||
bool intel() {return manufac==INTEL;}
|
||||
/// Is this an AMD processor?
|
||||
|
@ -125,6 +127,7 @@ version(D_InlineAsm_X86)
|
|||
uint model() {return core.cpuid.model;}
|
||||
/// Returns family
|
||||
uint family() {return core.cpuid.family;}
|
||||
}
|
||||
|
||||
shared static this()
|
||||
{
|
||||
|
@ -164,6 +167,8 @@ else
|
|||
auto vendor() {return "unknown vendor"; }
|
||||
auto processor() {return "unknown processor"; }
|
||||
|
||||
@property
|
||||
{
|
||||
bool mmx() {return false; }
|
||||
bool fxsr() {return false; }
|
||||
bool sse() {return false; }
|
||||
|
@ -188,4 +193,5 @@ else
|
|||
uint stepping() {return 0; }
|
||||
uint model() {return 0; }
|
||||
uint family() {return 0; }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -865,7 +865,7 @@ version (Win32)
|
|||
|
||||
unittest
|
||||
{
|
||||
auto dt = getUTCtime;
|
||||
auto dt = getUTCtime();
|
||||
auto ft = d_time2FILETIME(dt);
|
||||
auto dt1 = FILETIME2d_time(&ft);
|
||||
assert(dt == dt1, text(dt, " != ", dt1));
|
||||
|
@ -1191,12 +1191,12 @@ ulong[] benchmark(fun...)(uint times, ulong[] result = null)
|
|||
result.length = 0;
|
||||
foreach (i, Unused; fun)
|
||||
{
|
||||
immutable t = getUTCtime;
|
||||
immutable t = getUTCtime();
|
||||
foreach (j; 0 .. times)
|
||||
{
|
||||
fun[i]();
|
||||
}
|
||||
immutable delta = getUTCtime - t;
|
||||
immutable delta = getUTCtime() - t;
|
||||
result ~= cast(uint)delta;
|
||||
}
|
||||
foreach (ref e; result)
|
||||
|
|
|
@ -21,5 +21,5 @@ extern(C) void std_date_static_this();
|
|||
|
||||
shared static this()
|
||||
{
|
||||
std_date_static_this;
|
||||
std_date_static_this();
|
||||
}
|
||||
|
|
|
@ -2255,15 +2255,15 @@ assert(SysTime(DateTime(-7, 4, 5, 7, 45, 2)).day == 5);
|
|||
{
|
||||
version(testStdDateTime)
|
||||
{
|
||||
_assertPred!"=="(SysTime(DateTime(1970, 1, 1), UTC()).toUnixTime, 0);
|
||||
_assertPred!"=="(SysTime(DateTime(1970, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1), UTC()).toUnixTime, 0);
|
||||
_assertPred!"=="(SysTime(DateTime(1970, 1, 1, 0, 0, 0), FracSec.from!"usecs"(1), UTC()).toUnixTime, 0);
|
||||
_assertPred!"=="(SysTime(DateTime(1970, 1, 1, 0, 0, 0), FracSec.from!"msecs"(1), UTC()).toUnixTime, 0);
|
||||
_assertPred!"=="(SysTime(DateTime(1970, 1, 1, 0, 0, 1), UTC()).toUnixTime, 1);
|
||||
_assertPred!"=="(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999), UTC()).toUnixTime, 0);
|
||||
_assertPred!"=="(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"usecs"(999_999), UTC()).toUnixTime, 0);
|
||||
_assertPred!"=="(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"msecs"(999), UTC()).toUnixTime, 0);
|
||||
_assertPred!"=="(SysTime(DateTime(1969, 12, 31, 23, 59, 59), UTC()).toUnixTime, -1);
|
||||
_assertPred!"=="(SysTime(DateTime(1970, 1, 1), UTC()).toUnixTime(), 0);
|
||||
_assertPred!"=="(SysTime(DateTime(1970, 1, 1, 0, 0, 0), FracSec.from!"hnsecs"(1), UTC()).toUnixTime(), 0);
|
||||
_assertPred!"=="(SysTime(DateTime(1970, 1, 1, 0, 0, 0), FracSec.from!"usecs"(1), UTC()).toUnixTime(), 0);
|
||||
_assertPred!"=="(SysTime(DateTime(1970, 1, 1, 0, 0, 0), FracSec.from!"msecs"(1), UTC()).toUnixTime(), 0);
|
||||
_assertPred!"=="(SysTime(DateTime(1970, 1, 1, 0, 0, 1), UTC()).toUnixTime(), 1);
|
||||
_assertPred!"=="(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"hnsecs"(9_999_999), UTC()).toUnixTime(), 0);
|
||||
_assertPred!"=="(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"usecs"(999_999), UTC()).toUnixTime(), 0);
|
||||
_assertPred!"=="(SysTime(DateTime(1969, 12, 31, 23, 59, 59), FracSec.from!"msecs"(999), UTC()).toUnixTime(), 0);
|
||||
_assertPred!"=="(SysTime(DateTime(1969, 12, 31, 23, 59, 59), UTC()).toUnixTime(), -1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -30790,7 +30790,7 @@ public:
|
|||
sw.start();
|
||||
sw.stop();
|
||||
sw.reset();
|
||||
assert(sw.peek().to!("seconds", real) == 0);
|
||||
assert(sw.peek().to!("seconds", real)() == 0);
|
||||
}
|
||||
|
||||
|
||||
|
@ -30816,7 +30816,7 @@ public:
|
|||
doublestart = false;
|
||||
assert(!doublestart);
|
||||
sw.stop();
|
||||
assert((t1 - sw.peek()).to!("seconds", real) <= 0);
|
||||
assert((t1 - sw.peek()).to!("seconds", real)() <= 0);
|
||||
}
|
||||
|
||||
|
||||
|
@ -30842,7 +30842,7 @@ public:
|
|||
catch(AssertError e)
|
||||
doublestop = false;
|
||||
assert(!doublestop);
|
||||
assert((t1 - sw.peek()).to!("seconds", real) == 0);
|
||||
assert((t1 - sw.peek()).to!("seconds", real)() == 0);
|
||||
}
|
||||
|
||||
|
||||
|
@ -30962,7 +30962,7 @@ version(testStdDateTime) unittest
|
|||
void f1() {auto b = a;}
|
||||
void f2() {auto b = to!(string)(a);}
|
||||
auto r = benchmark!(f0, f1, f2)(10_000_000);
|
||||
writefln("Milliseconds to call fun[0] n times: %s", r[0].to!("msecs", int));
|
||||
writefln("Milliseconds to call fun[0] n times: %s", r[0].to!("msecs", int)());
|
||||
}
|
||||
|
||||
version(testStdDateTime) @safe unittest
|
||||
|
@ -31073,7 +31073,7 @@ version(testStdDateTime) @safe unittest
|
|||
void f2x() {}
|
||||
@safe void f1o() {}
|
||||
@safe void f2o() {}
|
||||
auto b1 = comparingBenchmark!(f1o, f2o, 1); // OK
|
||||
auto b1 = comparingBenchmark!(f1o, f2o, 1)(); // OK
|
||||
//static auto b2 = comparingBenchmark!(f1x, f2x, 1); // NG
|
||||
}
|
||||
|
||||
|
@ -31084,8 +31084,8 @@ version(testStdDateTime) unittest
|
|||
void f2x() {}
|
||||
@safe void f1o() {}
|
||||
@safe void f2o() {}
|
||||
auto b1 = comparingBenchmark!(f1o, f2o, 1); // OK
|
||||
auto b2 = comparingBenchmark!(f1x, f2x, 1); // OK
|
||||
auto b1 = comparingBenchmark!(f1o, f2o, 1)(); // OK
|
||||
auto b2 = comparingBenchmark!(f1x, f2x, 1)(); // OK
|
||||
}
|
||||
|
||||
|
||||
|
@ -32185,7 +32185,7 @@ version(testStdDateTime) @safe unittest
|
|||
{
|
||||
@safe static void func(TickDuration td)
|
||||
{
|
||||
assert(td.to!("seconds", real) <>= 0);
|
||||
assert(td.to!("seconds", real)() <>= 0);
|
||||
}
|
||||
|
||||
auto mt = measureTime!(func)();
|
||||
|
@ -32203,7 +32203,7 @@ version(testStdDateTime) unittest
|
|||
{
|
||||
static void func(TickDuration td)
|
||||
{
|
||||
assert(td.to!("seconds", real) <>= 0);
|
||||
assert(td.to!("seconds", real)() <>= 0);
|
||||
}
|
||||
|
||||
auto mt = measureTime!(func)();
|
||||
|
|
102
std/encoding.d
102
std/encoding.d
|
@ -369,14 +369,14 @@ template EncoderFunctions()
|
|||
|
||||
template ReadFromString()
|
||||
{
|
||||
bool canRead() { return s.length != 0; }
|
||||
@property bool canRead() { return s.length != 0; }
|
||||
E peek() { return s[0]; }
|
||||
E read() { E t = s[0]; s = s[1..$]; return t; }
|
||||
}
|
||||
|
||||
template ReverseReadFromString()
|
||||
{
|
||||
bool canRead() { return s.length != 0; }
|
||||
@property bool canRead() { return s.length != 0; }
|
||||
E peek() { return s[$-1]; }
|
||||
E read() { E t = s[$-1]; s = s[0..$-1]; return t; }
|
||||
}
|
||||
|
@ -665,7 +665,7 @@ template EncoderInstance(CharType : AsciiChar)
|
|||
alias AsciiChar E;
|
||||
alias AsciiString EString;
|
||||
|
||||
string encodingName()
|
||||
@property string encodingName()
|
||||
{
|
||||
return "ASCII";
|
||||
}
|
||||
|
@ -709,21 +709,21 @@ template EncoderInstance(CharType : AsciiChar)
|
|||
|
||||
dchar decodeViaRead()()
|
||||
{
|
||||
return read;
|
||||
return read();
|
||||
}
|
||||
|
||||
dchar safeDecodeViaRead()()
|
||||
{
|
||||
dchar c = read;
|
||||
dchar c = read();
|
||||
return canEncode(c) ? c : INVALID_SEQUENCE;
|
||||
}
|
||||
|
||||
dchar decodeReverseViaRead()()
|
||||
{
|
||||
return read;
|
||||
return read();
|
||||
}
|
||||
|
||||
EString replacementSequence()
|
||||
@property EString replacementSequence()
|
||||
{
|
||||
return cast(EString)("?");
|
||||
}
|
||||
|
@ -748,7 +748,7 @@ template EncoderInstance(CharType : Latin1Char)
|
|||
alias Latin1Char E;
|
||||
alias Latin1String EString;
|
||||
|
||||
string encodingName()
|
||||
@property string encodingName()
|
||||
{
|
||||
return "ISO-8859-1";
|
||||
}
|
||||
|
@ -786,20 +786,20 @@ template EncoderInstance(CharType : Latin1Char)
|
|||
|
||||
dchar decodeViaRead()()
|
||||
{
|
||||
return read;
|
||||
return read();
|
||||
}
|
||||
|
||||
dchar safeDecodeViaRead()()
|
||||
{
|
||||
return read;
|
||||
return read();
|
||||
}
|
||||
|
||||
dchar decodeReverseViaRead()()
|
||||
{
|
||||
return read;
|
||||
return read();
|
||||
}
|
||||
|
||||
EString replacementSequence()
|
||||
@property EString replacementSequence()
|
||||
{
|
||||
return cast(EString)("?");
|
||||
}
|
||||
|
@ -824,7 +824,7 @@ template EncoderInstance(CharType : Windows1252Char)
|
|||
alias Windows1252Char E;
|
||||
alias Windows1252String EString;
|
||||
|
||||
string encodingName()
|
||||
@property string encodingName()
|
||||
{
|
||||
return "windows-1252";
|
||||
}
|
||||
|
@ -887,24 +887,24 @@ template EncoderInstance(CharType : Windows1252Char)
|
|||
|
||||
dchar decodeViaRead()()
|
||||
{
|
||||
Windows1252Char c = read;
|
||||
Windows1252Char c = read();
|
||||
return (c >= 0x80 && c < 0xA0) ? charMap[c-0x80] : c;
|
||||
}
|
||||
|
||||
dchar safeDecodeViaRead()()
|
||||
{
|
||||
Windows1252Char c = read;
|
||||
Windows1252Char c = read();
|
||||
dchar d = (c >= 0x80 && c < 0xA0) ? charMap[c-0x80] : c;
|
||||
return d == 0xFFFD ? INVALID_SEQUENCE : d;
|
||||
}
|
||||
|
||||
dchar decodeReverseViaRead()()
|
||||
{
|
||||
Windows1252Char c = read;
|
||||
Windows1252Char c = read();
|
||||
return (c >= 0x80 && c < 0xA0) ? charMap[c-0x80] : c;
|
||||
}
|
||||
|
||||
EString replacementSequence()
|
||||
@property EString replacementSequence()
|
||||
{
|
||||
return cast(EString)("?");
|
||||
}
|
||||
|
@ -921,7 +921,7 @@ template EncoderInstance(CharType : char)
|
|||
alias char E;
|
||||
alias immutable(char)[] EString;
|
||||
|
||||
string encodingName()
|
||||
@property string encodingName()
|
||||
{
|
||||
return "UTF-8";
|
||||
}
|
||||
|
@ -999,7 +999,7 @@ template EncoderInstance(CharType : char)
|
|||
|
||||
void skipViaRead()()
|
||||
{
|
||||
auto c = read;
|
||||
auto c = read();
|
||||
if (c < 0xC0) return;
|
||||
int n = tails(cast(char) c);
|
||||
for (size_t i=0; i<n; ++i)
|
||||
|
@ -1010,26 +1010,26 @@ template EncoderInstance(CharType : char)
|
|||
|
||||
dchar decodeViaRead()()
|
||||
{
|
||||
dchar c = read;
|
||||
dchar c = read();
|
||||
if (c < 0xC0) return c;
|
||||
int n = tails(cast(char) c);
|
||||
c &= (1 << (6 - n)) - 1;
|
||||
for (size_t i=0; i<n; ++i)
|
||||
{
|
||||
c = (c << 6) + (read & 0x3F);
|
||||
c = (c << 6) + (read() & 0x3F);
|
||||
}
|
||||
return c;
|
||||
}
|
||||
|
||||
dchar safeDecodeViaRead()()
|
||||
{
|
||||
dchar c = read;
|
||||
dchar c = read();
|
||||
if (c < 0x80) return c;
|
||||
int n = tails(cast(char) c);
|
||||
if (n == 0) return INVALID_SEQUENCE;
|
||||
|
||||
if (!canRead) return INVALID_SEQUENCE;
|
||||
size_t d = peek;
|
||||
size_t d = peek();
|
||||
bool err =
|
||||
(
|
||||
(c < 0xC2) // fail overlong 2-byte sequences
|
||||
|
@ -1044,9 +1044,9 @@ template EncoderInstance(CharType : char)
|
|||
for (size_t i=0; i<n; ++i)
|
||||
{
|
||||
if (!canRead) return INVALID_SEQUENCE;
|
||||
d = peek;
|
||||
d = peek();
|
||||
if ((d & 0xC0) != 0x80) return INVALID_SEQUENCE;
|
||||
c = (c << 6) + (read & 0x3F);
|
||||
c = (c << 6) + (read() & 0x3F);
|
||||
}
|
||||
|
||||
return err ? INVALID_SEQUENCE : c;
|
||||
|
@ -1054,14 +1054,14 @@ template EncoderInstance(CharType : char)
|
|||
|
||||
dchar decodeReverseViaRead()()
|
||||
{
|
||||
dchar c = read;
|
||||
dchar c = read();
|
||||
if (c < 0x80) return c;
|
||||
size_t shift = 0;
|
||||
c &= 0x3F;
|
||||
for (size_t i=0; i<4; ++i)
|
||||
{
|
||||
shift += 6;
|
||||
auto d = read;
|
||||
auto d = read();
|
||||
size_t n = tails(cast(char) d);
|
||||
size_t mask = n == 0 ? 0x3F : (1 << (6 - n)) - 1;
|
||||
c += ((d & mask) << shift);
|
||||
|
@ -1070,7 +1070,7 @@ template EncoderInstance(CharType : char)
|
|||
return c;
|
||||
}
|
||||
|
||||
EString replacementSequence()
|
||||
@property EString replacementSequence()
|
||||
{
|
||||
return "\uFFFD";
|
||||
}
|
||||
|
@ -1087,7 +1087,7 @@ template EncoderInstance(CharType : wchar)
|
|||
alias wchar E;
|
||||
alias immutable(wchar)[] EString;
|
||||
|
||||
string encodingName()
|
||||
@property string encodingName()
|
||||
{
|
||||
return "UTF-16";
|
||||
}
|
||||
|
@ -1128,16 +1128,16 @@ template EncoderInstance(CharType : wchar)
|
|||
|
||||
void skipViaRead()()
|
||||
{
|
||||
wchar c = read;
|
||||
wchar c = read();
|
||||
if (c < 0xD800 || c >= 0xE000) return;
|
||||
read();
|
||||
}
|
||||
|
||||
dchar decodeViaRead()()
|
||||
{
|
||||
wchar c = read;
|
||||
wchar c = read();
|
||||
if (c < 0xD800 || c >= 0xE000) return cast(dchar)c;
|
||||
wchar d = read;
|
||||
wchar d = read();
|
||||
c &= 0x3FF;
|
||||
d &= 0x3FF;
|
||||
return 0x10000 + (c << 10) + d;
|
||||
|
@ -1145,13 +1145,13 @@ template EncoderInstance(CharType : wchar)
|
|||
|
||||
dchar safeDecodeViaRead()()
|
||||
{
|
||||
wchar c = read;
|
||||
wchar c = read();
|
||||
if (c < 0xD800 || c >= 0xE000) return cast(dchar)c;
|
||||
if (c >= 0xDC00) return INVALID_SEQUENCE;
|
||||
if (!canRead) return INVALID_SEQUENCE;
|
||||
wchar d = peek;
|
||||
wchar d = peek();
|
||||
if (d < 0xDC00 || d >= 0xE000) return INVALID_SEQUENCE;
|
||||
d = read;
|
||||
d = read();
|
||||
c &= 0x3FF;
|
||||
d &= 0x3FF;
|
||||
return 0x10000 + (c << 10) + d;
|
||||
|
@ -1159,15 +1159,15 @@ template EncoderInstance(CharType : wchar)
|
|||
|
||||
dchar decodeReverseViaRead()()
|
||||
{
|
||||
wchar c = read;
|
||||
wchar c = read();
|
||||
if (c < 0xD800 || c >= 0xE000) return cast(dchar)c;
|
||||
wchar d = read;
|
||||
wchar d = read();
|
||||
c &= 0x3FF;
|
||||
d &= 0x3FF;
|
||||
return 0x10000 + (d << 10) + c;
|
||||
}
|
||||
|
||||
EString replacementSequence()
|
||||
@property EString replacementSequence()
|
||||
{
|
||||
return "\uFFFD"w;
|
||||
}
|
||||
|
@ -1184,7 +1184,7 @@ template EncoderInstance(CharType : dchar)
|
|||
alias dchar E;
|
||||
alias immutable(dchar)[] EString;
|
||||
|
||||
string encodingName()
|
||||
@property string encodingName()
|
||||
{
|
||||
return "UTF-32";
|
||||
}
|
||||
|
@ -1221,21 +1221,21 @@ template EncoderInstance(CharType : dchar)
|
|||
|
||||
dchar decodeViaRead()()
|
||||
{
|
||||
return cast(dchar)read;
|
||||
return cast(dchar)read();
|
||||
}
|
||||
|
||||
dchar safeDecodeViaRead()()
|
||||
{
|
||||
dchar c = read;
|
||||
dchar c = read();
|
||||
return isValidCodePoint(c) ? c : INVALID_SEQUENCE;
|
||||
}
|
||||
|
||||
dchar decodeReverseViaRead()()
|
||||
{
|
||||
return cast(dchar)read;
|
||||
return cast(dchar)read();
|
||||
}
|
||||
|
||||
EString replacementSequence()
|
||||
@property EString replacementSequence()
|
||||
{
|
||||
return "\uFFFD"d;
|
||||
}
|
||||
|
@ -1279,7 +1279,7 @@ bool isValidCodePoint(dchar c)
|
|||
assert(encodingName!(Latin1Char) == "ISO-8859-1");
|
||||
-----------------------------------
|
||||
*/
|
||||
string encodingName(T)()
|
||||
@property string encodingName(T)()
|
||||
{
|
||||
return EncoderInstance!(T).encodingName;
|
||||
}
|
||||
|
@ -2198,7 +2198,7 @@ abstract class EncodingScheme
|
|||
* Normally this will be a representation of some substitution
|
||||
* character, such as U+FFFD or '?'.
|
||||
*/
|
||||
abstract immutable(ubyte)[] replacementSequence();
|
||||
abstract @property immutable(ubyte)[] replacementSequence();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2442,7 +2442,7 @@ class EncodingSchemeASCII : EncodingScheme
|
|||
return c;
|
||||
}
|
||||
|
||||
override immutable(ubyte)[] replacementSequence()
|
||||
override @property immutable(ubyte)[] replacementSequence()
|
||||
{
|
||||
return cast(immutable(ubyte)[])"?";
|
||||
}
|
||||
|
@ -2526,7 +2526,7 @@ class EncodingSchemeLatin1 : EncodingScheme
|
|||
return c;
|
||||
}
|
||||
|
||||
override immutable(ubyte)[] replacementSequence()
|
||||
override @property immutable(ubyte)[] replacementSequence()
|
||||
{
|
||||
return cast(immutable(ubyte)[])"?";
|
||||
}
|
||||
|
@ -2594,7 +2594,7 @@ class EncodingSchemeWindows1252 : EncodingScheme
|
|||
return c;
|
||||
}
|
||||
|
||||
override immutable(ubyte)[] replacementSequence()
|
||||
override @property immutable(ubyte)[] replacementSequence()
|
||||
{
|
||||
return cast(immutable(ubyte)[])"?";
|
||||
}
|
||||
|
@ -2662,7 +2662,7 @@ class EncodingSchemeUtf8 : EncodingScheme
|
|||
return c;
|
||||
}
|
||||
|
||||
override immutable(ubyte)[] replacementSequence()
|
||||
override @property immutable(ubyte)[] replacementSequence()
|
||||
{
|
||||
return cast(immutable(ubyte)[])"\uFFFD";
|
||||
}
|
||||
|
@ -2740,7 +2740,7 @@ class EncodingSchemeUtf16Native : EncodingScheme
|
|||
return c;
|
||||
}
|
||||
|
||||
override immutable(ubyte)[] replacementSequence()
|
||||
override @property immutable(ubyte)[] replacementSequence()
|
||||
{
|
||||
return cast(immutable(ubyte)[])"\uFFFD"w;
|
||||
}
|
||||
|
@ -2818,7 +2818,7 @@ class EncodingSchemeUtf32Native : EncodingScheme
|
|||
return c;
|
||||
}
|
||||
|
||||
override immutable(ubyte)[] replacementSequence()
|
||||
override @property immutable(ubyte)[] replacementSequence()
|
||||
{
|
||||
return cast(immutable(ubyte)[])"\uFFFD"d;
|
||||
}
|
||||
|
|
|
@ -863,7 +863,7 @@ class ErrnoException : Exception
|
|||
uint errno; // operating system error code
|
||||
this(string msg, string file = null, size_t line = 0)
|
||||
{
|
||||
errno = getErrno;
|
||||
errno = getErrno();
|
||||
version (linux)
|
||||
{
|
||||
char[1024] buf = void;
|
||||
|
|
|
@ -52,7 +52,7 @@ version (unittest)
|
|||
{
|
||||
import core.thread;
|
||||
|
||||
private string deleteme()
|
||||
private @property string deleteme()
|
||||
{
|
||||
static _deleteme = "deleteme.dmd.unittest";
|
||||
static _first = true;
|
||||
|
@ -229,7 +229,7 @@ class FileException : Exception
|
|||
line = The line where the error occurred.
|
||||
+/
|
||||
version(Windows) this(in char[] name,
|
||||
uint errno = GetLastError,
|
||||
uint errno = .GetLastError(),
|
||||
string file = __FILE__,
|
||||
size_t line = __LINE__)
|
||||
{
|
||||
|
@ -248,7 +248,7 @@ class FileException : Exception
|
|||
line = The line where the error occurred.
|
||||
+/
|
||||
version(Posix) this(in char[] name,
|
||||
uint errno = .getErrno,
|
||||
uint errno = .getErrno(),
|
||||
string file = __FILE__,
|
||||
size_t line = __LINE__)
|
||||
{
|
||||
|
@ -3572,7 +3572,7 @@ slurp(Types...)(string filename, in char[] format)
|
|||
auto app = appender!(typeof(return))();
|
||||
ElementType!(typeof(return)) toAdd;
|
||||
auto f = File(filename);
|
||||
scope(exit) f.close;
|
||||
scope(exit) f.close();
|
||||
foreach (line; f.byLine())
|
||||
{
|
||||
formattedRead(line, format, &toAdd);
|
||||
|
|
194
std/format.d
194
std/format.d
|
@ -641,18 +641,18 @@ struct FormatSpec(Char)
|
|||
assert(f.trailing == "ghi");
|
||||
// test with embedded %%s
|
||||
f = FormatSpec("ab%%cd%%ef%sg%%h%sij");
|
||||
w.clear;
|
||||
w.clear();
|
||||
f.writeUpToNextSpec(w);
|
||||
assert(w.data == "ab%cd%ef" && f.trailing == "g%%h%sij", w.data);
|
||||
f.writeUpToNextSpec(w);
|
||||
assert(w.data == "ab%cd%efg%h" && f.trailing == "ij");
|
||||
// bug4775
|
||||
f = FormatSpec("%%%s");
|
||||
w.clear;
|
||||
w.clear();
|
||||
f.writeUpToNextSpec(w);
|
||||
assert(w.data == "%" && f.trailing == "");
|
||||
f = FormatSpec("%%%%%s%%");
|
||||
w.clear;
|
||||
w.clear();
|
||||
while (f.writeUpToNextSpec(w)) continue;
|
||||
assert(w.data == "%%%");
|
||||
}
|
||||
|
@ -856,7 +856,7 @@ struct FormatSpec(Char)
|
|||
text("parseToFormatSpec: Cannot find character `",
|
||||
trailing.ptr[0], "' in the input string."));
|
||||
if (r.front != trailing.front) break;
|
||||
r.popFront;
|
||||
r.popFront();
|
||||
}
|
||||
trailing.popFront();
|
||||
}
|
||||
|
@ -1325,7 +1325,7 @@ if (isSomeString!T && !isStaticArray!T && !is(T == enum))
|
|||
unittest
|
||||
{
|
||||
FormatSpec!char f;
|
||||
auto w = appender!(string);
|
||||
auto w = appender!(string)();
|
||||
string s = "abc";
|
||||
formatValue(w, s, f);
|
||||
assert(w.data == "abc");
|
||||
|
@ -1779,7 +1779,7 @@ if (!isSomeString!T && is(T == class) && !isInputRange!T)
|
|||
// TODO: Change this once toString() works for shared objects.
|
||||
static assert(!is(T == shared), "unable to format shared objects");
|
||||
if (val is null) put(w, "null");
|
||||
else put(w, val.toString);
|
||||
else put(w, val.toString());
|
||||
}
|
||||
|
||||
/// ditto
|
||||
|
@ -2062,12 +2062,12 @@ unittest
|
|||
int[] a = [ 1, 3, 2 ];
|
||||
formattedWrite(w, "testing %(%s & %) embedded", a);
|
||||
assert(w.data == "testing 1 & 3 & 2 embedded", w.data);
|
||||
w.clear;
|
||||
w.clear();
|
||||
formattedWrite(w, "testing %((%s) %)) wyda3", a);
|
||||
assert(w.data == "testing (1) (3) (2) wyda3", w.data);
|
||||
|
||||
int[0] empt = [];
|
||||
w.clear;
|
||||
w.clear();
|
||||
formattedWrite(w, "(%s)", empt);
|
||||
assert(w.data == "([])", w.data);
|
||||
}
|
||||
|
@ -2131,7 +2131,7 @@ unittest
|
|||
formattedWrite(w, "%+r", a);
|
||||
assert(w.data.length == 4 && w.data[0] == 2 && w.data[1] == 3
|
||||
&& w.data[2] == 4 && w.data[3] == 5);
|
||||
w.clear;
|
||||
w.clear();
|
||||
formattedWrite(w, "%-r", a);
|
||||
assert(w.data.length == 4 && w.data[0] == 5 && w.data[1] == 4
|
||||
&& w.data[2] == 3 && w.data[3] == 2);
|
||||
|
@ -2146,10 +2146,10 @@ unittest
|
|||
42, 0);
|
||||
assert(w.data == "Numbers 0 and 42 are reversed and 420 repeated",
|
||||
w.data);
|
||||
w.clear;
|
||||
w.clear();
|
||||
formattedWrite(w, "asd%s", 23);
|
||||
assert(w.data == "asd23", w.data);
|
||||
w.clear;
|
||||
w.clear();
|
||||
formattedWrite(w, "%s%s", 23, 45);
|
||||
assert(w.data == "2345", w.data);
|
||||
}
|
||||
|
@ -2166,7 +2166,7 @@ unittest
|
|||
assert(stream.data == "hello world! true 57 ",
|
||||
stream.data);
|
||||
|
||||
stream.clear;
|
||||
stream.clear();
|
||||
formattedWrite(stream, "%g %A %s", 1.67, -1.28, float.nan);
|
||||
// std.c.stdio.fwrite(stream.data.ptr, stream.data.length, 1, stderr);
|
||||
|
||||
|
@ -2189,54 +2189,54 @@ unittest
|
|||
assert(stream.data == "1.67 -0X1.47AE147AE147BP+0 nan",
|
||||
stream.data);
|
||||
}
|
||||
stream.clear;
|
||||
stream.clear();
|
||||
|
||||
formattedWrite(stream, "%x %X", 0x1234AF, 0xAFAFAFAF);
|
||||
assert(stream.data == "1234af AFAFAFAF");
|
||||
stream.clear;
|
||||
stream.clear();
|
||||
|
||||
formattedWrite(stream, "%b %o", 0x1234AF, 0xAFAFAFAF);
|
||||
assert(stream.data == "100100011010010101111 25753727657");
|
||||
stream.clear;
|
||||
stream.clear();
|
||||
|
||||
formattedWrite(stream, "%d %s", 0x1234AF, 0xAFAFAFAF);
|
||||
assert(stream.data == "1193135 2947526575");
|
||||
stream.clear;
|
||||
stream.clear();
|
||||
|
||||
// formattedWrite(stream, "%s", 1.2 + 3.4i);
|
||||
// assert(stream.data == "1.2+3.4i");
|
||||
// stream.clear;
|
||||
// stream.clear();
|
||||
|
||||
formattedWrite(stream, "%a %A", 1.32, 6.78f);
|
||||
//formattedWrite(stream, "%x %X", 1.32);
|
||||
assert(stream.data == "0x1.51eb851eb851fp+0 0X1.B1EB86P+2");
|
||||
stream.clear;
|
||||
stream.clear();
|
||||
|
||||
formattedWrite(stream, "%#06.*f",2,12.345);
|
||||
assert(stream.data == "012.35");
|
||||
stream.clear;
|
||||
stream.clear();
|
||||
|
||||
formattedWrite(stream, "%#0*.*f",6,2,12.345);
|
||||
assert(stream.data == "012.35");
|
||||
stream.clear;
|
||||
stream.clear();
|
||||
|
||||
const real constreal = 1;
|
||||
formattedWrite(stream, "%g",constreal);
|
||||
assert(stream.data == "1");
|
||||
stream.clear;
|
||||
stream.clear();
|
||||
|
||||
formattedWrite(stream, "%7.4g:", 12.678);
|
||||
assert(stream.data == " 12.68:");
|
||||
stream.clear;
|
||||
stream.clear();
|
||||
|
||||
formattedWrite(stream, "%7.4g:", 12.678L);
|
||||
assert(stream.data == " 12.68:");
|
||||
stream.clear;
|
||||
stream.clear();
|
||||
|
||||
formattedWrite(stream, "%04f|%05d|%#05x|%#5x",-4.,-10,1,1);
|
||||
assert(stream.data == "-4.000000|-0010|0x001| 0x1",
|
||||
stream.data);
|
||||
stream.clear;
|
||||
stream.clear();
|
||||
|
||||
int i;
|
||||
string s;
|
||||
|
@ -2244,46 +2244,46 @@ unittest
|
|||
i = -10;
|
||||
formattedWrite(stream, "%d|%3d|%03d|%1d|%01.4f",i,i,i,i,cast(double) i);
|
||||
assert(stream.data == "-10|-10|-10|-10|-10.0000");
|
||||
stream.clear;
|
||||
stream.clear();
|
||||
|
||||
i = -5;
|
||||
formattedWrite(stream, "%d|%3d|%03d|%1d|%01.4f",i,i,i,i,cast(double) i);
|
||||
assert(stream.data == "-5| -5|-05|-5|-5.0000");
|
||||
stream.clear;
|
||||
stream.clear();
|
||||
|
||||
i = 0;
|
||||
formattedWrite(stream, "%d|%3d|%03d|%1d|%01.4f",i,i,i,i,cast(double) i);
|
||||
assert(stream.data == "0| 0|000|0|0.0000");
|
||||
stream.clear;
|
||||
stream.clear();
|
||||
|
||||
i = 5;
|
||||
formattedWrite(stream, "%d|%3d|%03d|%1d|%01.4f",i,i,i,i,cast(double) i);
|
||||
assert(stream.data == "5| 5|005|5|5.0000");
|
||||
stream.clear;
|
||||
stream.clear();
|
||||
|
||||
i = 10;
|
||||
formattedWrite(stream, "%d|%3d|%03d|%1d|%01.4f",i,i,i,i,cast(double) i);
|
||||
assert(stream.data == "10| 10|010|10|10.0000");
|
||||
stream.clear;
|
||||
stream.clear();
|
||||
|
||||
formattedWrite(stream, "%.0d", 0);
|
||||
assert(stream.data == "");
|
||||
stream.clear;
|
||||
stream.clear();
|
||||
|
||||
formattedWrite(stream, "%.g", .34);
|
||||
assert(stream.data == "0.3");
|
||||
stream.clear;
|
||||
stream.clear();
|
||||
|
||||
stream.clear; formattedWrite(stream, "%.0g", .34);
|
||||
stream.clear(); formattedWrite(stream, "%.0g", .34);
|
||||
assert(stream.data == "0.3");
|
||||
|
||||
stream.clear; formattedWrite(stream, "%.2g", .34);
|
||||
stream.clear(); formattedWrite(stream, "%.2g", .34);
|
||||
assert(stream.data == "0.34");
|
||||
|
||||
stream.clear; formattedWrite(stream, "%0.0008f", 1e-08);
|
||||
stream.clear(); formattedWrite(stream, "%0.0008f", 1e-08);
|
||||
assert(stream.data == "0.00000001");
|
||||
|
||||
stream.clear; formattedWrite(stream, "%0.0008f", 1e-05);
|
||||
stream.clear(); formattedWrite(stream, "%0.0008f", 1e-05);
|
||||
assert(stream.data == "0.00001000");
|
||||
|
||||
//return;
|
||||
|
@ -2291,209 +2291,209 @@ unittest
|
|||
|
||||
s = "helloworld";
|
||||
string r;
|
||||
stream.clear; formattedWrite(stream, "%.2s", s[0..5]);
|
||||
stream.clear(); formattedWrite(stream, "%.2s", s[0..5]);
|
||||
assert(stream.data == "he");
|
||||
stream.clear; formattedWrite(stream, "%.20s", s[0..5]);
|
||||
stream.clear(); formattedWrite(stream, "%.20s", s[0..5]);
|
||||
assert(stream.data == "hello");
|
||||
stream.clear; formattedWrite(stream, "%8s", s[0..5]);
|
||||
stream.clear(); formattedWrite(stream, "%8s", s[0..5]);
|
||||
assert(stream.data == " hello");
|
||||
|
||||
byte[] arrbyte = new byte[4];
|
||||
arrbyte[0] = 100;
|
||||
arrbyte[1] = -99;
|
||||
arrbyte[3] = 0;
|
||||
stream.clear; formattedWrite(stream, "%s", arrbyte);
|
||||
stream.clear(); formattedWrite(stream, "%s", arrbyte);
|
||||
assert(stream.data == "[100, -99, 0, 0]", stream.data);
|
||||
|
||||
ubyte[] arrubyte = new ubyte[4];
|
||||
arrubyte[0] = 100;
|
||||
arrubyte[1] = 200;
|
||||
arrubyte[3] = 0;
|
||||
stream.clear; formattedWrite(stream, "%s", arrubyte);
|
||||
stream.clear(); formattedWrite(stream, "%s", arrubyte);
|
||||
assert(stream.data == "[100, 200, 0, 0]", stream.data);
|
||||
|
||||
short[] arrshort = new short[4];
|
||||
arrshort[0] = 100;
|
||||
arrshort[1] = -999;
|
||||
arrshort[3] = 0;
|
||||
stream.clear; formattedWrite(stream, "%s", arrshort);
|
||||
stream.clear(); formattedWrite(stream, "%s", arrshort);
|
||||
assert(stream.data == "[100, -999, 0, 0]");
|
||||
stream.clear; formattedWrite(stream, "%s",arrshort);
|
||||
stream.clear(); formattedWrite(stream, "%s",arrshort);
|
||||
assert(stream.data == "[100, -999, 0, 0]");
|
||||
|
||||
ushort[] arrushort = new ushort[4];
|
||||
arrushort[0] = 100;
|
||||
arrushort[1] = 20_000;
|
||||
arrushort[3] = 0;
|
||||
stream.clear; formattedWrite(stream, "%s", arrushort);
|
||||
stream.clear(); formattedWrite(stream, "%s", arrushort);
|
||||
assert(stream.data == "[100, 20000, 0, 0]");
|
||||
|
||||
int[] arrint = new int[4];
|
||||
arrint[0] = 100;
|
||||
arrint[1] = -999;
|
||||
arrint[3] = 0;
|
||||
stream.clear; formattedWrite(stream, "%s", arrint);
|
||||
stream.clear(); formattedWrite(stream, "%s", arrint);
|
||||
assert(stream.data == "[100, -999, 0, 0]");
|
||||
stream.clear; formattedWrite(stream, "%s",arrint);
|
||||
stream.clear(); formattedWrite(stream, "%s",arrint);
|
||||
assert(stream.data == "[100, -999, 0, 0]");
|
||||
|
||||
long[] arrlong = new long[4];
|
||||
arrlong[0] = 100;
|
||||
arrlong[1] = -999;
|
||||
arrlong[3] = 0;
|
||||
stream.clear; formattedWrite(stream, "%s", arrlong);
|
||||
stream.clear(); formattedWrite(stream, "%s", arrlong);
|
||||
assert(stream.data == "[100, -999, 0, 0]");
|
||||
stream.clear; formattedWrite(stream, "%s",arrlong);
|
||||
stream.clear(); formattedWrite(stream, "%s",arrlong);
|
||||
assert(stream.data == "[100, -999, 0, 0]");
|
||||
|
||||
ulong[] arrulong = new ulong[4];
|
||||
arrulong[0] = 100;
|
||||
arrulong[1] = 999;
|
||||
arrulong[3] = 0;
|
||||
stream.clear; formattedWrite(stream, "%s", arrulong);
|
||||
stream.clear(); formattedWrite(stream, "%s", arrulong);
|
||||
assert(stream.data == "[100, 999, 0, 0]");
|
||||
|
||||
string[] arr2 = new string[4];
|
||||
arr2[0] = "hello";
|
||||
arr2[1] = "world";
|
||||
arr2[3] = "foo";
|
||||
stream.clear; formattedWrite(stream, "%s", arr2);
|
||||
stream.clear(); formattedWrite(stream, "%s", arr2);
|
||||
assert(stream.data == `["hello", "world", "", "foo"]`, stream.data);
|
||||
|
||||
stream.clear; formattedWrite(stream, "%.8d", 7);
|
||||
stream.clear(); formattedWrite(stream, "%.8d", 7);
|
||||
assert(stream.data == "00000007");
|
||||
|
||||
stream.clear; formattedWrite(stream, "%.8x", 10);
|
||||
stream.clear(); formattedWrite(stream, "%.8x", 10);
|
||||
assert(stream.data == "0000000a");
|
||||
|
||||
stream.clear; formattedWrite(stream, "%-3d", 7);
|
||||
stream.clear(); formattedWrite(stream, "%-3d", 7);
|
||||
assert(stream.data == "7 ");
|
||||
|
||||
stream.clear; formattedWrite(stream, "%*d", -3, 7);
|
||||
stream.clear(); formattedWrite(stream, "%*d", -3, 7);
|
||||
assert(stream.data == "7 ");
|
||||
|
||||
stream.clear; formattedWrite(stream, "%.*d", -3, 7);
|
||||
stream.clear(); formattedWrite(stream, "%.*d", -3, 7);
|
||||
//writeln(stream.data);
|
||||
assert(stream.data == "7");
|
||||
|
||||
// assert(false);
|
||||
// typedef int myint;
|
||||
// myint m = -7;
|
||||
// stream.clear; formattedWrite(stream, "", m);
|
||||
// stream.clear(); formattedWrite(stream, "", m);
|
||||
// assert(stream.data == "-7");
|
||||
|
||||
stream.clear; formattedWrite(stream, "%s", "abc"c);
|
||||
stream.clear(); formattedWrite(stream, "%s", "abc"c);
|
||||
assert(stream.data == "abc");
|
||||
stream.clear; formattedWrite(stream, "%s", "def"w);
|
||||
stream.clear(); formattedWrite(stream, "%s", "def"w);
|
||||
assert(stream.data == "def", text(stream.data.length));
|
||||
stream.clear; formattedWrite(stream, "%s", "ghi"d);
|
||||
stream.clear(); formattedWrite(stream, "%s", "ghi"d);
|
||||
assert(stream.data == "ghi");
|
||||
|
||||
here:
|
||||
void* p = cast(void*)0xDEADBEEF;
|
||||
stream.clear; formattedWrite(stream, "%s", p);
|
||||
stream.clear(); formattedWrite(stream, "%s", p);
|
||||
assert(stream.data == "DEADBEEF", stream.data);
|
||||
|
||||
stream.clear; formattedWrite(stream, "%#x", 0xabcd);
|
||||
stream.clear(); formattedWrite(stream, "%#x", 0xabcd);
|
||||
assert(stream.data == "0xabcd");
|
||||
stream.clear; formattedWrite(stream, "%#X", 0xABCD);
|
||||
stream.clear(); formattedWrite(stream, "%#X", 0xABCD);
|
||||
assert(stream.data == "0XABCD");
|
||||
|
||||
stream.clear; formattedWrite(stream, "%#o", octal!12345);
|
||||
stream.clear(); formattedWrite(stream, "%#o", octal!12345);
|
||||
assert(stream.data == "012345");
|
||||
stream.clear; formattedWrite(stream, "%o", 9);
|
||||
stream.clear(); formattedWrite(stream, "%o", 9);
|
||||
assert(stream.data == "11");
|
||||
|
||||
stream.clear; formattedWrite(stream, "%+d", 123);
|
||||
stream.clear(); formattedWrite(stream, "%+d", 123);
|
||||
assert(stream.data == "+123");
|
||||
stream.clear; formattedWrite(stream, "%+d", -123);
|
||||
stream.clear(); formattedWrite(stream, "%+d", -123);
|
||||
assert(stream.data == "-123");
|
||||
stream.clear; formattedWrite(stream, "% d", 123);
|
||||
stream.clear(); formattedWrite(stream, "% d", 123);
|
||||
assert(stream.data == " 123");
|
||||
stream.clear; formattedWrite(stream, "% d", -123);
|
||||
stream.clear(); formattedWrite(stream, "% d", -123);
|
||||
assert(stream.data == "-123");
|
||||
|
||||
stream.clear; formattedWrite(stream, "%%");
|
||||
stream.clear(); formattedWrite(stream, "%%");
|
||||
assert(stream.data == "%");
|
||||
|
||||
stream.clear; formattedWrite(stream, "%d", true);
|
||||
stream.clear(); formattedWrite(stream, "%d", true);
|
||||
assert(stream.data == "1");
|
||||
stream.clear; formattedWrite(stream, "%d", false);
|
||||
stream.clear(); formattedWrite(stream, "%d", false);
|
||||
assert(stream.data == "0");
|
||||
|
||||
stream.clear; formattedWrite(stream, "%d", 'a');
|
||||
stream.clear(); formattedWrite(stream, "%d", 'a');
|
||||
assert(stream.data == "97", stream.data);
|
||||
wchar wc = 'a';
|
||||
stream.clear; formattedWrite(stream, "%d", wc);
|
||||
stream.clear(); formattedWrite(stream, "%d", wc);
|
||||
assert(stream.data == "97");
|
||||
dchar dc = 'a';
|
||||
stream.clear; formattedWrite(stream, "%d", dc);
|
||||
stream.clear(); formattedWrite(stream, "%d", dc);
|
||||
assert(stream.data == "97");
|
||||
|
||||
byte b = byte.max;
|
||||
stream.clear; formattedWrite(stream, "%x", b);
|
||||
stream.clear(); formattedWrite(stream, "%x", b);
|
||||
assert(stream.data == "7f");
|
||||
stream.clear; formattedWrite(stream, "%x", ++b);
|
||||
stream.clear(); formattedWrite(stream, "%x", ++b);
|
||||
assert(stream.data == "80");
|
||||
stream.clear; formattedWrite(stream, "%x", ++b);
|
||||
stream.clear(); formattedWrite(stream, "%x", ++b);
|
||||
assert(stream.data == "81");
|
||||
|
||||
short sh = short.max;
|
||||
stream.clear; formattedWrite(stream, "%x", sh);
|
||||
stream.clear(); formattedWrite(stream, "%x", sh);
|
||||
assert(stream.data == "7fff");
|
||||
stream.clear; formattedWrite(stream, "%x", ++sh);
|
||||
stream.clear(); formattedWrite(stream, "%x", ++sh);
|
||||
assert(stream.data == "8000");
|
||||
stream.clear; formattedWrite(stream, "%x", ++sh);
|
||||
stream.clear(); formattedWrite(stream, "%x", ++sh);
|
||||
assert(stream.data == "8001");
|
||||
|
||||
i = int.max;
|
||||
stream.clear; formattedWrite(stream, "%x", i);
|
||||
stream.clear(); formattedWrite(stream, "%x", i);
|
||||
assert(stream.data == "7fffffff");
|
||||
stream.clear; formattedWrite(stream, "%x", ++i);
|
||||
stream.clear(); formattedWrite(stream, "%x", ++i);
|
||||
assert(stream.data == "80000000");
|
||||
stream.clear; formattedWrite(stream, "%x", ++i);
|
||||
stream.clear(); formattedWrite(stream, "%x", ++i);
|
||||
assert(stream.data == "80000001");
|
||||
|
||||
stream.clear; formattedWrite(stream, "%x", 10);
|
||||
stream.clear(); formattedWrite(stream, "%x", 10);
|
||||
assert(stream.data == "a");
|
||||
stream.clear; formattedWrite(stream, "%X", 10);
|
||||
stream.clear(); formattedWrite(stream, "%X", 10);
|
||||
assert(stream.data == "A");
|
||||
stream.clear; formattedWrite(stream, "%x", 15);
|
||||
stream.clear(); formattedWrite(stream, "%x", 15);
|
||||
assert(stream.data == "f");
|
||||
stream.clear; formattedWrite(stream, "%X", 15);
|
||||
stream.clear(); formattedWrite(stream, "%X", 15);
|
||||
assert(stream.data == "F");
|
||||
|
||||
Object c = null;
|
||||
stream.clear; formattedWrite(stream, "%s", c);
|
||||
stream.clear(); formattedWrite(stream, "%s", c);
|
||||
assert(stream.data == "null");
|
||||
|
||||
enum TestEnum
|
||||
{
|
||||
Value1, Value2
|
||||
}
|
||||
stream.clear; formattedWrite(stream, "%s", TestEnum.Value2);
|
||||
stream.clear(); formattedWrite(stream, "%s", TestEnum.Value2);
|
||||
assert(stream.data == "Value2", stream.data);
|
||||
stream.clear; formattedWrite(stream, "%s", cast(TestEnum)5);
|
||||
stream.clear(); formattedWrite(stream, "%s", cast(TestEnum)5);
|
||||
assert(stream.data == "cast(TestEnum)5", stream.data);
|
||||
|
||||
//immutable(char[5])[int] aa = ([3:"hello", 4:"betty"]);
|
||||
//stream.clear; formattedWrite(stream, "%s", aa.values);
|
||||
//stream.clear(); formattedWrite(stream, "%s", aa.values);
|
||||
//std.c.stdio.fwrite(stream.data.ptr, stream.data.length, 1, stderr);
|
||||
//assert(stream.data == "[[h,e,l,l,o],[b,e,t,t,y]]");
|
||||
//stream.clear; formattedWrite(stream, "%s", aa);
|
||||
//stream.clear(); formattedWrite(stream, "%s", aa);
|
||||
//assert(stream.data == "[3:[h,e,l,l,o],4:[b,e,t,t,y]]");
|
||||
|
||||
static const dchar[] ds = ['a','b'];
|
||||
for (int j = 0; j < ds.length; ++j)
|
||||
{
|
||||
stream.clear; formattedWrite(stream, " %d", ds[j]);
|
||||
stream.clear(); formattedWrite(stream, " %d", ds[j]);
|
||||
if (j == 0)
|
||||
assert(stream.data == " 97");
|
||||
else
|
||||
assert(stream.data == " 98");
|
||||
}
|
||||
|
||||
stream.clear; formattedWrite(stream, "%.-3d", 7);
|
||||
stream.clear(); formattedWrite(stream, "%.-3d", 7);
|
||||
assert(stream.data == "7", ">" ~ stream.data ~ "<");
|
||||
|
||||
|
||||
|
@ -2512,7 +2512,7 @@ here:
|
|||
foreach (prec; precs)
|
||||
foreach (format; formats)
|
||||
{
|
||||
stream.clear;
|
||||
stream.clear();
|
||||
auto fmt = "%" ~ flag1 ~ flag2 ~ flag3
|
||||
~ flag4 ~ flag5 ~ width ~ prec ~ format
|
||||
~ '\0';
|
||||
|
@ -2634,7 +2634,7 @@ unittest
|
|||
}
|
||||
|
||||
//auto r = std.string.format("%s", aa.values);
|
||||
stream.clear; formattedWrite(stream, "%s", aa);
|
||||
stream.clear(); formattedWrite(stream, "%s", aa);
|
||||
//assert(stream.data == "[3:[h,e,l,l,o],4:[b,e,t,t,y]]", stream.data);
|
||||
// r = std.string.format("%s", aa);
|
||||
// assert(r == "[3:[h,e,l,l,o],4:[b,e,t,t,y]]");
|
||||
|
@ -2655,12 +2655,12 @@ private void skipData(Range, Char)(ref Range input, ref FormatSpec!Char spec)
|
|||
{
|
||||
switch (spec.spec)
|
||||
{
|
||||
case 'c': input.popFront; break;
|
||||
case 'c': input.popFront(); break;
|
||||
case 'd':
|
||||
if (input.front == '+' || input.front == '-') input.popFront();
|
||||
goto case 'u';
|
||||
case 'u':
|
||||
while (!input.empty && isDigit(input.front)) input.popFront;
|
||||
while (!input.empty && isDigit(input.front)) input.popFront();
|
||||
break;
|
||||
default:
|
||||
assert(false,
|
||||
|
|
|
@ -94,7 +94,7 @@ struct Interval
|
|||
///
|
||||
@trusted string toString()const
|
||||
{
|
||||
auto s = appender!string;
|
||||
auto s = appender!string();
|
||||
formattedWrite(s,"%s..%s", begin, end);
|
||||
return s.data;
|
||||
}
|
||||
|
@ -442,7 +442,7 @@ struct CodepointSet
|
|||
j = ivals[0];
|
||||
}
|
||||
}
|
||||
auto ref save() const { return this; }
|
||||
@property auto ref save() const { return this; }
|
||||
}
|
||||
static assert(isForwardRange!ByCodepoint);
|
||||
|
||||
|
@ -534,7 +534,7 @@ public:
|
|||
{
|
||||
if(s.empty)
|
||||
return;
|
||||
const(CodepointSet) set = s.chars > 500_000 ? (negative=true, s.dup.negate) : s;
|
||||
const(CodepointSet) set = s.chars > 500_000 ? (negative=true, s.dup.negate()) : s;
|
||||
uint bound = 0;//set up on first iteration
|
||||
ushort emptyBlock = ushort.max;
|
||||
auto ivals = set.ivals;
|
||||
|
|
|
@ -2185,7 +2185,7 @@ public:
|
|||
|
||||
|
||||
/// Set all of the floating-point status flags to false.
|
||||
void resetIeeeFlags() { IeeeFlags.resetIeeeFlags; }
|
||||
void resetIeeeFlags() { IeeeFlags.resetIeeeFlags(); }
|
||||
|
||||
/// Return a snapshot of the current state of the floating-point status flags.
|
||||
@property IeeeFlags ieeeFlags()
|
||||
|
@ -3908,7 +3908,7 @@ bool approxEqual(T, U, V)(T lhs, U rhs, V maxRelDiff, V maxAbsDiff = 1e-5)
|
|||
static if (isInputRange!U)
|
||||
{
|
||||
// Two ranges
|
||||
for (;; lhs.popFront, rhs.popFront)
|
||||
for (;; lhs.popFront(), rhs.popFront())
|
||||
{
|
||||
if (lhs.empty) return rhs.empty;
|
||||
if (rhs.empty) return lhs.empty;
|
||||
|
@ -3919,7 +3919,7 @@ bool approxEqual(T, U, V)(T lhs, U rhs, V maxRelDiff, V maxAbsDiff = 1e-5)
|
|||
else
|
||||
{
|
||||
// lhs is range, rhs is number
|
||||
for (; !lhs.empty; lhs.popFront)
|
||||
for (; !lhs.empty; lhs.popFront())
|
||||
{
|
||||
if (!approxEqual(lhs.front, rhs, maxRelDiff, maxAbsDiff))
|
||||
return false;
|
||||
|
|
|
@ -143,7 +143,7 @@ string d = getDigestString(a, b, c);
|
|||
string getDigestString(in void[][] data...)
|
||||
{
|
||||
MD5_CTX ctx;
|
||||
ctx.start;
|
||||
ctx.start();
|
||||
foreach (datum; data) {
|
||||
ctx.update(datum);
|
||||
}
|
||||
|
|
|
@ -737,7 +737,7 @@ EmailStatus isEmail (Char) (const(Char)[] email, CheckDns checkDNS = CheckDns.no
|
|||
auto finalStatus = returnStatus.max;
|
||||
|
||||
if (returnStatus.length != 1)
|
||||
returnStatus.popFront;
|
||||
returnStatus.popFront();
|
||||
|
||||
parseData[EmailPart.status] = to!(tstring)(returnStatus);
|
||||
|
||||
|
@ -1278,31 +1278,31 @@ struct EmailStatus
|
|||
}
|
||||
|
||||
/// Indicates if the email address is valid or not.
|
||||
bool valid ()
|
||||
@property bool valid ()
|
||||
{
|
||||
return valid_;
|
||||
}
|
||||
|
||||
/// The local part of the email address, that is, the part before the @ sign.
|
||||
string localPart ()
|
||||
@property string localPart ()
|
||||
{
|
||||
return localPart_;
|
||||
}
|
||||
|
||||
/// The domain part of the email address, that is, the part after the @ sign.
|
||||
string domainPart ()
|
||||
@property string domainPart ()
|
||||
{
|
||||
return domainPart_;
|
||||
}
|
||||
|
||||
/// The email status code
|
||||
EmailStatusCode statusCode ()
|
||||
@property EmailStatusCode statusCode ()
|
||||
{
|
||||
return statusCode_;
|
||||
}
|
||||
|
||||
/// Returns a describing string of the status code
|
||||
string status ()
|
||||
@property string status ()
|
||||
{
|
||||
return statusCodeDescription(statusCode_);
|
||||
}
|
||||
|
|
|
@ -1170,7 +1170,7 @@ euclideanDistance(Range1, Range2)(Range1 a, Range2 b)
|
|||
enum bool haveLen = hasLength!(Range1) && hasLength!(Range2);
|
||||
static if (haveLen) enforce(a.length == b.length);
|
||||
typeof(return) result = 0;
|
||||
for (; !a.empty; a.popFront, b.popFront)
|
||||
for (; !a.empty; a.popFront(), b.popFront())
|
||||
{
|
||||
auto t = a.front - b.front;
|
||||
result += t * t;
|
||||
|
@ -1188,7 +1188,7 @@ euclideanDistance(Range1, Range2, F)(Range1 a, Range2 b, F limit)
|
|||
enum bool haveLen = hasLength!(Range1) && hasLength!(Range2);
|
||||
static if (haveLen) enforce(a.length == b.length);
|
||||
typeof(return) result = 0;
|
||||
for (; ; a.popFront, b.popFront)
|
||||
for (; ; a.popFront(), b.popFront())
|
||||
{
|
||||
if (a.empty)
|
||||
{
|
||||
|
@ -1226,7 +1226,7 @@ dotProduct(Range1, Range2)(Range1 a, Range2 b)
|
|||
enum bool haveLen = hasLength!(Range1) && hasLength!(Range2);
|
||||
static if (haveLen) enforce(a.length == b.length);
|
||||
typeof(return) result = 0;
|
||||
for (; !a.empty; a.popFront, b.popFront)
|
||||
for (; !a.empty; a.popFront(), b.popFront())
|
||||
{
|
||||
result += a.front * b.front;
|
||||
}
|
||||
|
@ -1293,14 +1293,14 @@ unittest
|
|||
double[] b = [ 4., 6., ];
|
||||
assert(dotProduct(a, b) == 16);
|
||||
assert(dotProduct([1, 3, -5], [4, -2, -1]) == 3);
|
||||
|
||||
|
||||
// Make sure the unrolled loop codepath gets tested.
|
||||
static const x =
|
||||
static const x =
|
||||
[1.0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18];
|
||||
static const y =
|
||||
static const y =
|
||||
[2.0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19];
|
||||
assert(dotProduct(x, y) == 2280);
|
||||
|
||||
|
||||
// Test in CTFE
|
||||
enum ctfeDot = dotProduct(x, y);
|
||||
static assert(ctfeDot == 2280);
|
||||
|
@ -1319,7 +1319,7 @@ cosineSimilarity(Range1, Range2)(Range1 a, Range2 b)
|
|||
enum bool haveLen = hasLength!(Range1) && hasLength!(Range2);
|
||||
static if (haveLen) enforce(a.length == b.length);
|
||||
FPTemporary!(typeof(return)) norma = 0, normb = 0, dotprod = 0;
|
||||
for (; !a.empty; a.popFront, b.popFront)
|
||||
for (; !a.empty; a.popFront(), b.popFront())
|
||||
{
|
||||
immutable t1 = a.front, t2 = b.front;
|
||||
norma += t1 * t1;
|
||||
|
@ -1464,7 +1464,7 @@ kullbackLeiblerDivergence(Range1, Range2)(Range1 a, Range2 b)
|
|||
enum bool haveLen = hasLength!(Range1) && hasLength!(Range2);
|
||||
static if (haveLen) enforce(a.length == b.length);
|
||||
FPTemporary!(typeof(return)) result = 0;
|
||||
for (; !a.empty; a.popFront, b.popFront)
|
||||
for (; !a.empty; a.popFront(), b.popFront())
|
||||
{
|
||||
immutable t1 = a.front;
|
||||
if (t1 == 0) continue;
|
||||
|
@ -1509,7 +1509,7 @@ jensenShannonDivergence(Range1, Range2)(Range1 a, Range2 b)
|
|||
enum bool haveLen = hasLength!(Range1) && hasLength!(Range2);
|
||||
static if (haveLen) enforce(a.length == b.length);
|
||||
FPTemporary!(typeof(return)) result = 0;
|
||||
for (; !a.empty; a.popFront, b.popFront)
|
||||
for (; !a.empty; a.popFront(), b.popFront())
|
||||
{
|
||||
immutable t1 = a.front;
|
||||
immutable t2 = b.front;
|
||||
|
@ -1538,7 +1538,7 @@ jensenShannonDivergence(Range1, Range2, F)(Range1 a, Range2 b, F limit)
|
|||
static if (haveLen) enforce(a.length == b.length);
|
||||
FPTemporary!(typeof(return)) result = 0;
|
||||
limit *= 2;
|
||||
for (; !a.empty; a.popFront, b.popFront)
|
||||
for (; !a.empty; a.popFront(), b.popFront())
|
||||
{
|
||||
immutable t1 = a.front;
|
||||
immutable t2 = b.front;
|
||||
|
@ -1813,11 +1813,11 @@ string[] s = ["Hello", "brave", "new", "world"];
|
|||
string[] t = ["Hello", "new", "world"];
|
||||
auto simIter = gapWeightedSimilarityIncremental(s, t, 1);
|
||||
assert(simIter.front == 3); // three 1-length matches
|
||||
simIter.popFront;
|
||||
simIter.popFront();
|
||||
assert(simIter.front == 3); // three 2-length matches
|
||||
simIter.popFront;
|
||||
simIter.popFront();
|
||||
assert(simIter.front == 1); // one 3-length match
|
||||
simIter.popFront;
|
||||
simIter.popFront();
|
||||
assert(simIter.empty); // no more match
|
||||
----
|
||||
|
||||
|
@ -1981,12 +1981,12 @@ t.length) time.
|
|||
Returns the gapped similarity at the current match length (initially
|
||||
1, grows with each call to $(D popFront)).
|
||||
*/
|
||||
F front() { return currentValue; }
|
||||
@property F front() { return currentValue; }
|
||||
|
||||
/**
|
||||
Returns whether there are more matches.
|
||||
*/
|
||||
bool empty() {
|
||||
@property bool empty() {
|
||||
if (currentValue) return false;
|
||||
if (kl) {
|
||||
free(kl);
|
||||
|
@ -2012,11 +2012,11 @@ unittest
|
|||
auto simIter = gapWeightedSimilarityIncremental(s, t, 1.0);
|
||||
//foreach (e; simIter) writeln(e);
|
||||
assert(simIter.front == 3); // three 1-length matches
|
||||
simIter.popFront;
|
||||
simIter.popFront();
|
||||
assert(simIter.front == 3, text(simIter.front)); // three 2-length matches
|
||||
simIter.popFront;
|
||||
simIter.popFront();
|
||||
assert(simIter.front == 1); // one 3-length matches
|
||||
simIter.popFront;
|
||||
simIter.popFront();
|
||||
assert(simIter.empty); // no more match
|
||||
|
||||
s = ["Hello"];
|
||||
|
@ -2028,21 +2028,21 @@ unittest
|
|||
t = ["Hello"];
|
||||
simIter = gapWeightedSimilarityIncremental(s, t, 0.5);
|
||||
assert(simIter.front == 1); // one match
|
||||
simIter.popFront;
|
||||
simIter.popFront();
|
||||
assert(simIter.empty);
|
||||
|
||||
s = ["Hello", "world"];
|
||||
t = ["Hello"];
|
||||
simIter = gapWeightedSimilarityIncremental(s, t, 0.5);
|
||||
assert(simIter.front == 1); // one match
|
||||
simIter.popFront;
|
||||
simIter.popFront();
|
||||
assert(simIter.empty);
|
||||
|
||||
s = ["Hello", "world"];
|
||||
t = ["Hello", "yah", "world"];
|
||||
simIter = gapWeightedSimilarityIncremental(s, t, 0.5);
|
||||
assert(simIter.front == 2); // two 1-gram matches
|
||||
simIter.popFront;
|
||||
simIter.popFront();
|
||||
assert(simIter.front == 0.5, text(simIter.front)); // one 2-gram match, 1 gap
|
||||
}
|
||||
|
||||
|
@ -2058,7 +2058,7 @@ unittest
|
|||
{
|
||||
//writeln(e);
|
||||
assert(e == witness.front);
|
||||
witness.popFront;
|
||||
witness.popFront();
|
||||
}
|
||||
witness = [ 3., 1.3125, 0.25 ];
|
||||
sim = GapWeightedSimilarityIncremental!(string[])(
|
||||
|
@ -2069,7 +2069,7 @@ unittest
|
|||
{
|
||||
//writeln(e);
|
||||
assert(e == witness.front);
|
||||
witness.popFront;
|
||||
witness.popFront();
|
||||
}
|
||||
assert(witness.empty);
|
||||
}
|
||||
|
@ -2567,7 +2567,7 @@ struct Stride(R) {
|
|||
return range[index * _nSteps];
|
||||
}
|
||||
|
||||
E front() {
|
||||
E front() @property {
|
||||
return range[0];
|
||||
}
|
||||
|
||||
|
|
|
@ -1452,7 +1452,7 @@ auto pathSplitter(C)(const(C)[] path) @safe pure nothrow
|
|||
_path = rtrimDirSeparators(_path[0 .. i+1]);
|
||||
}
|
||||
}
|
||||
auto save() { return this; }
|
||||
@property auto save() { return this; }
|
||||
|
||||
|
||||
private:
|
||||
|
@ -1549,7 +1549,7 @@ unittest
|
|||
// save()
|
||||
auto ps1 = pathSplitter("foo/bar/baz");
|
||||
auto ps2 = ps1.save();
|
||||
ps1.popFront;
|
||||
ps1.popFront();
|
||||
assert (equal2(ps1, ["bar", "baz"]));
|
||||
assert (equal2(ps2, ["foo", "bar", "baz"]));
|
||||
|
||||
|
|
|
@ -830,7 +830,7 @@ else version(Posix)
|
|||
public:
|
||||
interval_t periodCount() const
|
||||
{
|
||||
return microseconds;
|
||||
return microseconds();
|
||||
}
|
||||
|
||||
interval_t seconds() const
|
||||
|
|
|
@ -351,7 +351,7 @@ version (Windows) string shell(string cmd)
|
|||
foreach (ref e; 0 .. 8)
|
||||
{
|
||||
formattedWrite(a, "%x", rndGen.front);
|
||||
rndGen.popFront;
|
||||
rndGen.popFront();
|
||||
}
|
||||
auto filename = a.data;
|
||||
scope(exit) if (exists(filename)) remove(filename);
|
||||
|
@ -369,7 +369,7 @@ version (Posix) string shell(string cmd)
|
|||
{
|
||||
result ~= line;
|
||||
}
|
||||
f.close;
|
||||
f.close();
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
50
std/random.d
50
std/random.d
|
@ -233,7 +233,7 @@ $(D x0).
|
|||
~ LinearCongruentialEngine.stringof);
|
||||
}
|
||||
_x = modulus ? (x0 % modulus) : x0;
|
||||
popFront;
|
||||
popFront();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -343,12 +343,12 @@ unittest
|
|||
foreach (e; checking0)
|
||||
{
|
||||
assert(rnd0.front == e);
|
||||
rnd0.popFront;
|
||||
rnd0.popFront();
|
||||
}
|
||||
// Test the 10000th invocation
|
||||
// Correct value taken from:
|
||||
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf
|
||||
rnd0.seed;
|
||||
rnd0.seed();
|
||||
popFrontN(rnd0, 9999);
|
||||
assert(rnd0.front == 1043618065);
|
||||
|
||||
|
@ -360,13 +360,13 @@ unittest
|
|||
foreach (e; checking)
|
||||
{
|
||||
assert(rnd.front == e);
|
||||
rnd.popFront;
|
||||
rnd.popFront();
|
||||
}
|
||||
|
||||
// Test the 10000th invocation
|
||||
// Correct value taken from:
|
||||
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf
|
||||
rnd.seed;
|
||||
rnd.seed();
|
||||
popFrontN(rnd, 9999);
|
||||
assert(rnd.front == 399268537);
|
||||
}
|
||||
|
@ -443,7 +443,7 @@ Parameter for the generator.
|
|||
//mt[mti] &= ResultType.max;
|
||||
/* for >32 bit machines */
|
||||
}
|
||||
popFront;
|
||||
popFront();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -561,7 +561,7 @@ unittest
|
|||
}
|
||||
{
|
||||
Mt19937 gen;
|
||||
gen.popFront;
|
||||
gen.popFront();
|
||||
//popFrontN(gen, 1); // skip 1 element
|
||||
b = gen.front;
|
||||
}
|
||||
|
@ -814,16 +814,16 @@ auto n = rnd.front;
|
|||
----
|
||||
*/
|
||||
|
||||
uint unpredictableSeed()
|
||||
@property uint unpredictableSeed()
|
||||
{
|
||||
static bool seeded;
|
||||
static MinstdRand0 rand;
|
||||
if (!seeded) {
|
||||
uint threadID = cast(uint) cast(void*) Thread.getThis();
|
||||
rand.seed((getpid + threadID) ^ cast(uint) TickDuration.currSystemTick().length);
|
||||
rand.seed((getpid() + threadID) ^ cast(uint) TickDuration.currSystemTick().length);
|
||||
seeded = true;
|
||||
}
|
||||
rand.popFront;
|
||||
rand.popFront();
|
||||
return cast(uint) (TickDuration.currSystemTick().length ^ rand.front);
|
||||
}
|
||||
|
||||
|
@ -849,7 +849,7 @@ Global random number generator used by various functions in this
|
|||
module whenever no generator is specified. It is allocated per-thread
|
||||
and initialized to an unpredictable value for each thread.
|
||||
*/
|
||||
ref Random rndGen()
|
||||
@property ref Random rndGen()
|
||||
{
|
||||
static Random result;
|
||||
static bool initialized;
|
||||
|
@ -1149,14 +1149,14 @@ if (isForwardRange!Range && isNumeric!(ElementType!Range) && !isArray!Range)
|
|||
size_t dice(Range)(Range proportions)
|
||||
if (isForwardRange!Range && isNumeric!(ElementType!Range) && !isArray!Range)
|
||||
{
|
||||
return diceImpl(rndGen(), proportions);
|
||||
return diceImpl(rndGen, proportions);
|
||||
}
|
||||
|
||||
/// Ditto
|
||||
size_t dice(Num)(Num[] proportions...)
|
||||
if (isNumeric!Num)
|
||||
{
|
||||
return diceImpl(rndGen(), proportions);
|
||||
return diceImpl(rndGen, proportions);
|
||||
}
|
||||
|
||||
private size_t diceImpl(Rng, Range)(ref Rng rng, Range proportions)
|
||||
|
@ -1217,7 +1217,7 @@ struct RandomCover(Range, Random)
|
|||
_input = input;
|
||||
_rnd = rnd;
|
||||
_chosen.length = _input.length;
|
||||
popFront;
|
||||
popFront();
|
||||
}
|
||||
|
||||
static if (hasLength!Range)
|
||||
|
@ -1326,7 +1326,7 @@ struct RandomSample(R, Random = void)
|
|||
|
||||
// If we're using the default thread-local random number generator then
|
||||
// we shouldn't store a copy of it here. Random == void is a sentinel
|
||||
// for this. If we're using a user-specified generator then we have no
|
||||
// for this. If we're using a user-specified generator then we have no
|
||||
// choice but to store a copy.
|
||||
static if(!is(Random == void))
|
||||
{
|
||||
|
@ -1350,7 +1350,7 @@ Constructor.
|
|||
enforce(_toSelect <= _available);
|
||||
// we should skip some elements initially so we don't always
|
||||
// start with the first
|
||||
prime;
|
||||
prime();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1361,7 +1361,7 @@ Constructor.
|
|||
return _toSelect == 0;
|
||||
}
|
||||
|
||||
auto ref front()
|
||||
@property auto ref front()
|
||||
{
|
||||
assert(!empty);
|
||||
return _input.front;
|
||||
|
@ -1370,11 +1370,11 @@ Constructor.
|
|||
/// Ditto
|
||||
void popFront()
|
||||
{
|
||||
_input.popFront;
|
||||
_input.popFront();
|
||||
--_available;
|
||||
--_toSelect;
|
||||
++_index;
|
||||
prime;
|
||||
prime();
|
||||
}
|
||||
|
||||
/// Ditto
|
||||
|
@ -1408,12 +1408,12 @@ Returns the index of the visited record.
|
|||
static if(is(Random == void))
|
||||
{
|
||||
auto r = uniform(0, _available);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
auto r = uniform(0, _available, gen);
|
||||
}
|
||||
|
||||
|
||||
if (r < _toSelect)
|
||||
{
|
||||
// chosen!
|
||||
|
@ -1421,7 +1421,7 @@ Returns the index of the visited record.
|
|||
}
|
||||
// not chosen, retry
|
||||
assert(!_input.empty);
|
||||
_input.popFront;
|
||||
_input.popFront();
|
||||
++_index;
|
||||
--_available;
|
||||
assert(_available > 0);
|
||||
|
@ -1437,7 +1437,7 @@ if(isInputRange!R)
|
|||
}
|
||||
|
||||
/// Ditto
|
||||
auto randomSample(R)(R r, size_t n) if (hasLength!R)
|
||||
auto randomSample(R)(R r, size_t n) if (hasLength!R)
|
||||
{
|
||||
return RandomSample!(R, void)(r, n, r.length);
|
||||
}
|
||||
|
@ -1452,8 +1452,8 @@ if(isInputRange!R && isInputRange!Random)
|
|||
}
|
||||
|
||||
/// Ditto
|
||||
auto randomSample(R, Random)(R r, size_t n, Random gen)
|
||||
if (isInputRange!R && hasLength!R && isInputRange!Random)
|
||||
auto randomSample(R, Random)(R r, size_t n, Random gen)
|
||||
if (isInputRange!R && hasLength!R && isInputRange!Random)
|
||||
{
|
||||
auto ret = RandomSample!(R, Random)(r, n, r.length);
|
||||
ret.gen = gen;
|
||||
|
|
82
std/range.d
82
std/range.d
|
@ -512,8 +512,8 @@ unittest
|
|||
struct B
|
||||
{
|
||||
void popFront();
|
||||
bool empty();
|
||||
int front();
|
||||
@property bool empty();
|
||||
@property int front();
|
||||
}
|
||||
static assert(!isBidirectionalRange!(B));
|
||||
struct C
|
||||
|
@ -577,26 +577,26 @@ unittest
|
|||
struct B
|
||||
{
|
||||
void popFront();
|
||||
bool empty();
|
||||
int front();
|
||||
@property bool empty();
|
||||
@property int front();
|
||||
}
|
||||
static assert(!isRandomAccessRange!(B));
|
||||
struct C
|
||||
{
|
||||
void popFront();
|
||||
bool empty();
|
||||
int front();
|
||||
@property bool empty();
|
||||
@property int front();
|
||||
void popBack();
|
||||
int back();
|
||||
@property int back();
|
||||
}
|
||||
static assert(!isRandomAccessRange!(C));
|
||||
struct D
|
||||
{
|
||||
bool empty();
|
||||
@property bool empty();
|
||||
@property D save();
|
||||
int front();
|
||||
@property int front();
|
||||
void popFront();
|
||||
int back();
|
||||
@property int back();
|
||||
void popBack();
|
||||
ref int opIndex(uint);
|
||||
@property size_t length();
|
||||
|
@ -621,7 +621,7 @@ unittest
|
|||
|
||||
@property R save() { return this; }
|
||||
|
||||
int back() const { return 0; }
|
||||
@property int back() const { return 0; }
|
||||
void popBack(){}
|
||||
|
||||
int opIndex(size_t n) const { return 0; }
|
||||
|
@ -1002,7 +1002,7 @@ if (isBidirectionalRange!(Unqual!Range))
|
|||
@property auto ref front() { return source.back; }
|
||||
void popFront() { source.popBack(); }
|
||||
@property auto ref back() { return source.front; }
|
||||
void popBack() { source.popFront; }
|
||||
void popBack() { source.popFront(); }
|
||||
|
||||
static if(is(typeof(.moveBack(source))))
|
||||
{
|
||||
|
@ -1607,7 +1607,7 @@ if (Ranges.length > 0 && allSatisfy!(isInputRange, staticMap!(Unqual, Ranges)))
|
|||
foreach (i, Unused; R)
|
||||
{
|
||||
if (source[i].empty) continue;
|
||||
source[i].popFront;
|
||||
source[i].popFront();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -1941,7 +1941,7 @@ if (Rs.length > 1 && allSatisfy!(isInputRange, staticMap!(Unqual, Rs)))
|
|||
public Rs source;
|
||||
private size_t _current = size_t.max;
|
||||
|
||||
bool empty()
|
||||
@property bool empty()
|
||||
{
|
||||
foreach (i, Unused; Rs)
|
||||
{
|
||||
|
@ -2002,7 +2002,7 @@ if (Rs.length > 1 && allSatisfy!(isInputRange, staticMap!(Unqual, Rs)))
|
|||
}
|
||||
|
||||
static if (allSatisfy!(isForwardRange, staticMap!(Unqual, Rs)))
|
||||
auto save()
|
||||
@property auto save()
|
||||
{
|
||||
Result result;
|
||||
result._current = _current;
|
||||
|
@ -2015,7 +2015,7 @@ if (Rs.length > 1 && allSatisfy!(isInputRange, staticMap!(Unqual, Rs)))
|
|||
|
||||
static if (allSatisfy!(hasLength, Rs))
|
||||
{
|
||||
size_t length()
|
||||
@property size_t length()
|
||||
{
|
||||
size_t result;
|
||||
foreach (i, R; Rs)
|
||||
|
@ -2659,7 +2659,7 @@ size_t popBackN(Range)(ref Range r, size_t n) if (isInputRange!(Range))
|
|||
foreach (i; 0 .. n)
|
||||
{
|
||||
if (r.empty) return i;
|
||||
r.popBack;
|
||||
r.popBack();
|
||||
}
|
||||
}
|
||||
return n;
|
||||
|
@ -2817,7 +2817,7 @@ if (isForwardRange!(Unqual!Range) && !isInfinite!(Unqual!Range))
|
|||
/// Ditto
|
||||
void popFront()
|
||||
{
|
||||
_current.popFront;
|
||||
_current.popFront();
|
||||
if (_current.empty) _current = _original;
|
||||
}
|
||||
|
||||
|
@ -2947,7 +2947,7 @@ unittest // For infinite ranges
|
|||
struct InfRange
|
||||
{
|
||||
void popFront() { }
|
||||
int front() { return 0; }
|
||||
@property int front() { return 0; }
|
||||
enum empty = false;
|
||||
}
|
||||
|
||||
|
@ -3023,7 +3023,7 @@ if(Ranges.length && allSatisfy!(isInputRange, staticMap!(Unqual, Ranges)))
|
|||
}
|
||||
else
|
||||
{
|
||||
bool empty()
|
||||
@property bool empty()
|
||||
{
|
||||
final switch (stoppingPolicy)
|
||||
{
|
||||
|
@ -3734,7 +3734,7 @@ unittest {
|
|||
foreach(a, b; ls) {}
|
||||
|
||||
// Make sure StoppingPolicy.requireSameLength throws.
|
||||
arr2.popBack;
|
||||
arr2.popBack();
|
||||
ls = lockstep(arr1, arr2, StoppingPolicy.requireSameLength);
|
||||
|
||||
try {
|
||||
|
@ -4348,7 +4348,7 @@ struct FrontTransversal(Ror,
|
|||
TransverseOptions opt = TransverseOptions.assumeJagged)
|
||||
{
|
||||
alias Unqual!(Ror) RangeOfRanges;
|
||||
alias typeof(RangeOfRanges.init.front().front()) ElementType;
|
||||
alias typeof(RangeOfRanges.init.front.front) ElementType;
|
||||
|
||||
private void prime()
|
||||
{
|
||||
|
@ -4356,13 +4356,13 @@ struct FrontTransversal(Ror,
|
|||
{
|
||||
while (!_input.empty && _input.front.empty)
|
||||
{
|
||||
_input.popFront;
|
||||
_input.popFront();
|
||||
}
|
||||
static if (isBidirectionalRange!RangeOfRanges)
|
||||
{
|
||||
while (!_input.empty && _input.back.empty)
|
||||
{
|
||||
_input.popBack;
|
||||
_input.popBack();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4374,7 +4374,7 @@ struct FrontTransversal(Ror,
|
|||
this(RangeOfRanges input)
|
||||
{
|
||||
_input = input;
|
||||
prime;
|
||||
prime();
|
||||
static if (opt == TransverseOptions.enforceNotJagged)
|
||||
// (isRandomAccessRange!RangeOfRanges
|
||||
// && hasLength!(.ElementType!RangeOfRanges))
|
||||
|
@ -4431,8 +4431,8 @@ struct FrontTransversal(Ror,
|
|||
void popFront()
|
||||
{
|
||||
assert(!empty);
|
||||
_input.popFront;
|
||||
prime;
|
||||
_input.popFront();
|
||||
prime();
|
||||
}
|
||||
|
||||
/// Ditto
|
||||
|
@ -4461,8 +4461,8 @@ struct FrontTransversal(Ror,
|
|||
void popBack()
|
||||
{
|
||||
assert(!empty);
|
||||
_input.popBack;
|
||||
prime;
|
||||
_input.popBack();
|
||||
prime();
|
||||
}
|
||||
|
||||
/// Ditto
|
||||
|
@ -4629,13 +4629,13 @@ struct Transversal(Ror,
|
|||
{
|
||||
while (!_input.empty && _input.front.length <= _n)
|
||||
{
|
||||
_input.popFront;
|
||||
_input.popFront();
|
||||
}
|
||||
static if (isBidirectionalRange!RangeOfRanges)
|
||||
{
|
||||
while (!_input.empty && _input.back.length <= _n)
|
||||
{
|
||||
_input.popBack;
|
||||
_input.popBack();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4648,7 +4648,7 @@ struct Transversal(Ror,
|
|||
{
|
||||
_input = input;
|
||||
_n = n;
|
||||
prime;
|
||||
prime();
|
||||
static if (opt == TransverseOptions.enforceNotJagged)
|
||||
{
|
||||
if (empty) return;
|
||||
|
@ -4705,8 +4705,8 @@ struct Transversal(Ror,
|
|||
void popFront()
|
||||
{
|
||||
assert(!empty);
|
||||
_input.popFront;
|
||||
prime;
|
||||
_input.popFront();
|
||||
prime();
|
||||
}
|
||||
|
||||
/// Ditto
|
||||
|
@ -4735,8 +4735,8 @@ struct Transversal(Ror,
|
|||
void popBack()
|
||||
{
|
||||
assert(!empty);
|
||||
_input.popBack;
|
||||
prime;
|
||||
_input.popBack();
|
||||
prime();
|
||||
}
|
||||
|
||||
/// Ditto
|
||||
|
@ -4853,13 +4853,13 @@ unittest
|
|||
ror.front = 5;
|
||||
scope(exit) ror.front = 2;
|
||||
assert(x[0][1] == 5);
|
||||
assert(ror.moveFront == 5);
|
||||
assert(ror.moveFront() == 5);
|
||||
}
|
||||
{
|
||||
ror.back = 999;
|
||||
scope(exit) ror.back = 4;
|
||||
assert(x[1][1] == 999);
|
||||
assert(ror.moveBack == 999);
|
||||
assert(ror.moveBack() == 999);
|
||||
}
|
||||
{
|
||||
ror[0] = 999;
|
||||
|
@ -4905,7 +4905,7 @@ struct Transposed(RangeOfRanges)
|
|||
foreach (ref e; _input)
|
||||
{
|
||||
if (e.empty) continue;
|
||||
e.popFront;
|
||||
e.popFront();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5378,7 +5378,7 @@ unittest
|
|||
{
|
||||
struct R
|
||||
{
|
||||
ref int front() { static int x = 42; return x; }
|
||||
@property ref int front() { static int x = 42; return x; }
|
||||
this(this){}
|
||||
}
|
||||
R r;
|
||||
|
@ -5746,7 +5746,7 @@ template InputRangeObject(R) if (isInputRange!(Unqual!R)) {
|
|||
return .moveBack(_range);
|
||||
}
|
||||
|
||||
@property void popBack() { return _range.popBack; }
|
||||
@property void popBack() { return _range.popBack(); }
|
||||
|
||||
static if (hasAssignableElements!R) {
|
||||
@property void back(E newVal) {
|
||||
|
|
16
std/regex.d
16
std/regex.d
|
@ -1550,7 +1550,7 @@ struct Parser(R, bool CTFE=false)
|
|||
state = State.Start;
|
||||
break;
|
||||
case 'D':
|
||||
set.add(unicodeNd.dup.negate);
|
||||
set.add(unicodeNd.dup.negate());
|
||||
state = State.Start;
|
||||
break;
|
||||
case 's':
|
||||
|
@ -1558,7 +1558,7 @@ struct Parser(R, bool CTFE=false)
|
|||
state = State.Start;
|
||||
break;
|
||||
case 'S':
|
||||
set.add(unicodeWhite_Space.dup.negate);
|
||||
set.add(unicodeWhite_Space.dup.negate());
|
||||
state = State.Start;
|
||||
break;
|
||||
case 'w':
|
||||
|
@ -1566,7 +1566,7 @@ struct Parser(R, bool CTFE=false)
|
|||
state = State.Start;
|
||||
break;
|
||||
case 'W':
|
||||
set.add(wordCharacter.dup.negate);
|
||||
set.add(wordCharacter.dup.negate());
|
||||
state = State.Start;
|
||||
break;
|
||||
default:
|
||||
|
@ -1665,7 +1665,7 @@ struct Parser(R, bool CTFE=false)
|
|||
switch(op)
|
||||
{
|
||||
case Operator.Negate:
|
||||
stack.top.negate;
|
||||
stack.top.negate();
|
||||
break;
|
||||
case Operator.Union:
|
||||
auto s = stack.pop();//2nd operand
|
||||
|
@ -1816,7 +1816,7 @@ struct Parser(R, bool CTFE=false)
|
|||
break;
|
||||
case 'D':
|
||||
next();
|
||||
charsetToIr(unicodeNd.dup.negate);
|
||||
charsetToIr(unicodeNd.dup.negate());
|
||||
break;
|
||||
case 'b': next(); put(Bytecode(IR.Wordboundary, 0)); break;
|
||||
case 'B': next(); put(Bytecode(IR.Notwordboundary, 0)); break;
|
||||
|
@ -1826,7 +1826,7 @@ struct Parser(R, bool CTFE=false)
|
|||
break;
|
||||
case 'S':
|
||||
next();
|
||||
charsetToIr(unicodeWhite_Space.dup.negate);
|
||||
charsetToIr(unicodeWhite_Space.dup.negate());
|
||||
break;
|
||||
case 'w':
|
||||
next();
|
||||
|
@ -1834,7 +1834,7 @@ struct Parser(R, bool CTFE=false)
|
|||
break;
|
||||
case 'W':
|
||||
next();
|
||||
charsetToIr(wordCharacter.dup.negate);
|
||||
charsetToIr(wordCharacter.dup.negate());
|
||||
break;
|
||||
case 'p': case 'P':
|
||||
auto CodepointSet = parseUnicodePropertySpec(current == 'P');
|
||||
|
@ -6731,7 +6731,7 @@ public:
|
|||
{
|
||||
//skip past the separator
|
||||
_offset = _match.pre.length + _match.hit.length;
|
||||
_match.popFront;
|
||||
_match.popFront();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
10
std/regexp.d
10
std/regexp.d
|
@ -790,7 +790,7 @@ class RegExp
|
|||
/*******************
|
||||
* Return the slice of the input that precedes the matched substring.
|
||||
*/
|
||||
public string pre()
|
||||
public @property string pre()
|
||||
{
|
||||
return input[0 .. pmatch[0].rm_so];
|
||||
}
|
||||
|
@ -798,7 +798,7 @@ class RegExp
|
|||
/*******************
|
||||
* Return the slice of the input that follows the matched substring.
|
||||
*/
|
||||
public string post()
|
||||
public @property string post()
|
||||
{
|
||||
return input[pmatch[0].rm_eo .. $];
|
||||
}
|
||||
|
@ -3361,12 +3361,12 @@ struct Splitter(Range)
|
|||
return this;
|
||||
}
|
||||
|
||||
Range front()
|
||||
@property Range front()
|
||||
{
|
||||
return _input[0 .. _chunkLength];
|
||||
}
|
||||
|
||||
bool empty()
|
||||
@property bool empty()
|
||||
{
|
||||
return _input.empty;
|
||||
}
|
||||
|
@ -3378,7 +3378,7 @@ struct Splitter(Range)
|
|||
_input = _input[_chunkLength .. _input.length];
|
||||
return;
|
||||
}
|
||||
advance;
|
||||
advance();
|
||||
_input = _input[_chunkLength .. _input.length];
|
||||
_chunkLength = _input.length - search().length;
|
||||
}
|
||||
|
|
|
@ -1193,7 +1193,7 @@ abstract class Address
|
|||
socklen_t nameLen() const;
|
||||
|
||||
/// Family of this address.
|
||||
AddressFamily addressFamily() const
|
||||
@property AddressFamily addressFamily() const
|
||||
{
|
||||
return cast(AddressFamily) name().sa_family;
|
||||
}
|
||||
|
@ -2297,7 +2297,7 @@ public:
|
|||
|
||||
|
||||
/// Get underlying socket handle.
|
||||
socket_t handle() const
|
||||
@property socket_t handle() const
|
||||
{
|
||||
return sock;
|
||||
}
|
||||
|
@ -2351,13 +2351,13 @@ public:
|
|||
|
||||
|
||||
/// Get the socket's address family.
|
||||
AddressFamily addressFamily() // getter
|
||||
@property AddressFamily addressFamily()
|
||||
{
|
||||
return _family;
|
||||
}
|
||||
|
||||
/// Property that indicates if this is a valid, alive socket.
|
||||
bool isAlive() const // getter
|
||||
@property bool isAlive() const
|
||||
{
|
||||
int type;
|
||||
socklen_t typesize = cast(socklen_t) type.sizeof;
|
||||
|
|
78
std/stdio.d
78
std/stdio.d
|
@ -172,7 +172,7 @@ public:
|
|||
assert(f.isOpen);
|
||||
file = f;
|
||||
this.format = format;
|
||||
popFront; // prime the range
|
||||
popFront(); // prime the range
|
||||
}
|
||||
|
||||
/// Range primitive implementations.
|
||||
|
@ -194,7 +194,7 @@ public:
|
|||
file.readln(line);
|
||||
if (!line.length)
|
||||
{
|
||||
file.detach;
|
||||
file.detach();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -293,7 +293,7 @@ object refers to it anymore.
|
|||
~this()
|
||||
{
|
||||
if (!p) return;
|
||||
if (p.refs == 1) close;
|
||||
if (p.refs == 1) close();
|
||||
else --p.refs;
|
||||
}
|
||||
|
||||
|
@ -323,7 +323,7 @@ Throws exception in case of error.
|
|||
*/
|
||||
void open(string name, in char[] stdioOpenmode = "rb")
|
||||
{
|
||||
detach;
|
||||
detach();
|
||||
auto another = File(name, stdioOpenmode);
|
||||
swap(this, another);
|
||||
}
|
||||
|
@ -335,7 +335,7 @@ opengroup.org/onlinepubs/007908799/xsh/_popen.html, _popen).
|
|||
*/
|
||||
version(Posix) void popen(string command, in char[] stdioOpenmode = "r")
|
||||
{
|
||||
detach;
|
||||
detach();
|
||||
p = new Impl(errnoEnforce(.popen(command, stdioOpenmode),
|
||||
"Cannot run command `"~command~"'"),
|
||||
1, command, true);
|
||||
|
@ -382,7 +382,7 @@ and throws if that fails.
|
|||
{
|
||||
if (!p) return;
|
||||
// @@@BUG
|
||||
//if (p.refs == 1) close;
|
||||
//if (p.refs == 1) close();
|
||||
p = null;
|
||||
}
|
||||
|
||||
|
@ -649,7 +649,7 @@ If the file is not opened, throws an exception. Otherwise, writes its
|
|||
arguments in text format to the file. */
|
||||
void write(S...)(S args)
|
||||
{
|
||||
auto w = lockingTextWriter();
|
||||
auto w = lockingTextWriter;
|
||||
foreach (arg; args)
|
||||
{
|
||||
alias typeof(arg) A;
|
||||
|
@ -706,7 +706,7 @@ first argument. */
|
|||
assert(p.handle);
|
||||
static assert(S.length>0, errorMessage);
|
||||
static assert(isSomeString!(S[0]), errorMessage);
|
||||
auto w = lockingTextWriter();
|
||||
auto w = lockingTextWriter;
|
||||
std.format.formattedWrite(w, args);
|
||||
}
|
||||
|
||||
|
@ -864,7 +864,7 @@ with every line. */
|
|||
cplusplus.com/reference/clibrary/cstdio/_tmpfile.html, _tmpfile). */
|
||||
static File tmpfile()
|
||||
{
|
||||
auto h = errnoEnforce(core.stdc.stdio.tmpfile,
|
||||
auto h = errnoEnforce(core.stdc.stdio.tmpfile(),
|
||||
"Could not create temporary file with tmpfile()");
|
||||
File result = void;
|
||||
result.p = new Impl(h, 1, null);
|
||||
|
@ -894,7 +894,7 @@ Returns the $(D FILE*) corresponding to this object.
|
|||
|
||||
unittest
|
||||
{
|
||||
assert(stdout.getFP == std.c.stdio.stdout);
|
||||
assert(stdout.getFP() == std.c.stdio.stdout);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -926,13 +926,13 @@ Range that reads one line at a time. */
|
|||
}
|
||||
|
||||
/// Range primitive implementations.
|
||||
bool empty() const
|
||||
@property bool empty() const
|
||||
{
|
||||
return !file.isOpen;
|
||||
}
|
||||
|
||||
/// Ditto
|
||||
Char[] front()
|
||||
@property Char[] front()
|
||||
{
|
||||
if (line is null) popFront();
|
||||
return line;
|
||||
|
@ -945,7 +945,7 @@ Range that reads one line at a time. */
|
|||
file.readln(line, terminator);
|
||||
assert(line !is null, "Bug in File.readln");
|
||||
if (!line.length)
|
||||
file.detach;
|
||||
file.detach();
|
||||
else if (keepTerminator == KeepTerminator.no
|
||||
&& std.algorithm.endsWith(line, terminator))
|
||||
line.length = line.length - 1;
|
||||
|
@ -974,7 +974,7 @@ to this file. */
|
|||
auto f = File("testingByLine");
|
||||
scope(exit)
|
||||
{
|
||||
f.close;
|
||||
f.close();
|
||||
assert(!f.isOpen);
|
||||
}
|
||||
foreach (line; f.byLine())
|
||||
|
@ -983,7 +983,7 @@ to this file. */
|
|||
}
|
||||
assert(i == witness.length);
|
||||
i = 0;
|
||||
f.rewind;
|
||||
f.rewind();
|
||||
foreach (line; f.byLine(KeepTerminator.yes))
|
||||
{
|
||||
assert(line == witness[i++] ~ '\n' || i == witness.length);
|
||||
|
@ -1005,7 +1005,7 @@ to this file. */
|
|||
// std.file.write("deleteme", "1 2\n4 1\n5 100");
|
||||
// scope(exit) std.file.remove("deleteme");
|
||||
// File f = File("deleteme");
|
||||
// scope(exit) f.close;
|
||||
// scope(exit) f.close();
|
||||
// auto t = [ tuple(1, 2), tuple(4, 1), tuple(5, 100) ];
|
||||
// uint i;
|
||||
// foreach (e; f.byRecord!(int, int)("%s %s"))
|
||||
|
@ -1105,7 +1105,7 @@ In case of an I/O error, an $(D StdioException) is thrown.
|
|||
auto f = File("testingByChunk");
|
||||
scope(exit)
|
||||
{
|
||||
f.close;
|
||||
f.close();
|
||||
assert(!f.isOpen);
|
||||
std.file.remove("testingByChunk");
|
||||
}
|
||||
|
@ -1255,7 +1255,7 @@ $(D Range) that locks the file and allows fast writing to it.
|
|||
}
|
||||
|
||||
/// Convenience function.
|
||||
LockingTextWriter lockingTextWriter()
|
||||
@property LockingTextWriter lockingTextWriter()
|
||||
{
|
||||
return LockingTextWriter(this);
|
||||
}
|
||||
|
@ -1327,7 +1327,7 @@ struct LockingTextReader
|
|||
return false;
|
||||
}
|
||||
|
||||
dchar front()
|
||||
@property dchar front()
|
||||
{
|
||||
enforce(!empty);
|
||||
return _crt;
|
||||
|
@ -1463,7 +1463,7 @@ unittest
|
|||
auto f = File(file, "w");
|
||||
// scope(exit) { std.file.remove(file); }
|
||||
f.write("Hello, ", "world number ", 42, "!");
|
||||
f.close;
|
||||
f.close();
|
||||
assert(cast(char[]) std.file.read(file) == "Hello, world number 42!");
|
||||
// // test write on stdout
|
||||
//auto saveStdout = stdout;
|
||||
|
@ -1471,7 +1471,7 @@ unittest
|
|||
//stdout.open(file, "w");
|
||||
Object obj;
|
||||
//write("Hello, ", "world number ", 42, "! ", obj);
|
||||
//stdout.close;
|
||||
//stdout.close();
|
||||
// auto result = cast(char[]) std.file.read(file);
|
||||
// assert(result == "Hello, world number 42! null", result);
|
||||
}
|
||||
|
@ -1521,7 +1521,7 @@ unittest
|
|||
auto f = File(file, "w");
|
||||
scope(exit) { std.file.remove(file); }
|
||||
f.writeln("Hello, ", "world number ", 42, "!");
|
||||
f.close;
|
||||
f.close();
|
||||
version (Windows)
|
||||
assert(cast(char[]) std.file.read(file) ==
|
||||
"Hello, world number 42!\r\n");
|
||||
|
@ -1533,7 +1533,7 @@ unittest
|
|||
scope(exit) stdout = saveStdout;
|
||||
stdout.open(file, "w");
|
||||
writeln("Hello, ", "world number ", 42, "!");
|
||||
stdout.close;
|
||||
stdout.close();
|
||||
version (Windows)
|
||||
assert(cast(char[]) std.file.read(file) ==
|
||||
"Hello, world number 42!\r\n");
|
||||
|
@ -1598,14 +1598,14 @@ unittest
|
|||
auto f = File(file, "w");
|
||||
scope(exit) { std.file.remove(file); }
|
||||
f.writef("Hello, %s world number %s!", "nice", 42);
|
||||
f.close;
|
||||
f.close();
|
||||
assert(cast(char[]) std.file.read(file) == "Hello, nice world number 42!");
|
||||
// test write on stdout
|
||||
auto saveStdout = stdout;
|
||||
scope(exit) stdout = saveStdout;
|
||||
stdout.open(file, "w");
|
||||
writef("Hello, %s world number %s!", "nice", 42);
|
||||
stdout.close;
|
||||
stdout.close();
|
||||
assert(cast(char[]) std.file.read(file) == "Hello, nice world number 42!");
|
||||
}
|
||||
|
||||
|
@ -1626,7 +1626,7 @@ unittest
|
|||
auto f = File(file, "w");
|
||||
scope(exit) { std.file.remove(file); }
|
||||
f.writefln("Hello, %s world number %s!", "nice", 42);
|
||||
f.close;
|
||||
f.close();
|
||||
version (Windows)
|
||||
assert(cast(char[]) std.file.read(file) ==
|
||||
"Hello, nice world number 42!\r\n");
|
||||
|
@ -1646,7 +1646,7 @@ unittest
|
|||
// F b = a % 2;
|
||||
// writeln(b);
|
||||
// }
|
||||
// stdout.close;
|
||||
// stdout.close();
|
||||
// auto read = cast(char[]) std.file.read(file);
|
||||
// version (Windows)
|
||||
// assert(read == "Hello, nice world number 42!\r\n1\r\n1\r\n1\r\n", read);
|
||||
|
@ -1916,7 +1916,7 @@ unittest
|
|||
{
|
||||
assert(false);
|
||||
}
|
||||
f.close;
|
||||
f.close();
|
||||
|
||||
// test looping with a file with three lines
|
||||
std.file.write(file, "Line one\nline two\nline three\n");
|
||||
|
@ -1930,7 +1930,7 @@ unittest
|
|||
else assert(false);
|
||||
++i;
|
||||
}
|
||||
f.close;
|
||||
f.close();
|
||||
|
||||
// test looping with a file with three lines, last without a newline
|
||||
std.file.write(file, "Line one\nline two\nline three");
|
||||
|
@ -1944,7 +1944,7 @@ unittest
|
|||
else assert(false);
|
||||
++i;
|
||||
}
|
||||
f.close;
|
||||
f.close();
|
||||
}
|
||||
|
||||
// test with ubyte[] inputs
|
||||
|
@ -1959,7 +1959,7 @@ unittest
|
|||
{
|
||||
assert(false);
|
||||
}
|
||||
f.close;
|
||||
f.close();
|
||||
|
||||
// test looping with a file with three lines
|
||||
std.file.write(file, "Line one\nline two\nline three\n");
|
||||
|
@ -1974,7 +1974,7 @@ unittest
|
|||
else assert(false);
|
||||
++i;
|
||||
}
|
||||
f.close;
|
||||
f.close();
|
||||
|
||||
// test looping with a file with three lines, last without a newline
|
||||
std.file.write(file, "Line one\nline two\nline three");
|
||||
|
@ -1988,7 +1988,7 @@ unittest
|
|||
else assert(false);
|
||||
++i;
|
||||
}
|
||||
f.close;
|
||||
f.close();
|
||||
|
||||
}
|
||||
|
||||
|
@ -2007,7 +2007,7 @@ unittest
|
|||
else assert(false);
|
||||
++i;
|
||||
}
|
||||
f.close;
|
||||
f.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2106,7 +2106,7 @@ unittest
|
|||
{
|
||||
assert(false);
|
||||
}
|
||||
f.close;
|
||||
f.close();
|
||||
|
||||
// test looping with a file with three lines
|
||||
std.file.write(file, "Line one\nline two\nline three\n");
|
||||
|
@ -2120,7 +2120,7 @@ unittest
|
|||
else break;
|
||||
++i;
|
||||
}
|
||||
f.close;
|
||||
f.close();
|
||||
}
|
||||
|
||||
/*********************
|
||||
|
@ -2133,7 +2133,7 @@ class StdioException : Exception
|
|||
|
||||
/**
|
||||
Initialize with a message and an error code. */
|
||||
this(string message, uint e = .getErrno)
|
||||
this(string message, uint e = .getErrno())
|
||||
{
|
||||
errno = e;
|
||||
version (Posix)
|
||||
|
@ -2166,7 +2166,7 @@ Initialize with a message and an error code. */
|
|||
/// ditto
|
||||
static void opCall()
|
||||
{
|
||||
throw new StdioException(null, .getErrno);
|
||||
throw new StdioException(null, .getErrno());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2201,7 +2201,7 @@ unittest
|
|||
scope(exit) std.file.remove("deleteme");
|
||||
{
|
||||
File f = File("deleteme");
|
||||
scope(exit) f.close;
|
||||
scope(exit) f.close();
|
||||
auto t = [ tuple(1, 2), tuple(4, 1), tuple(5, 100) ];
|
||||
uint i;
|
||||
foreach (e; f.byRecord!(int, int)("%s %s"))
|
||||
|
|
128
std/stream.d
128
std/stream.d
|
@ -235,7 +235,7 @@ interface InputStream {
|
|||
int readf(...); /// ditto
|
||||
|
||||
/// Retrieve the number of bytes available for immediate reading.
|
||||
size_t available();
|
||||
@property size_t available();
|
||||
|
||||
/***
|
||||
* Return whether the current file position is the same as the end of the
|
||||
|
@ -248,7 +248,7 @@ interface InputStream {
|
|||
|
||||
bool eof();
|
||||
|
||||
bool isOpen(); /// Return true if the stream is currently open.
|
||||
@property bool isOpen(); /// Return true if the stream is currently open.
|
||||
}
|
||||
|
||||
/// Interface for writable streams.
|
||||
|
@ -354,7 +354,7 @@ interface OutputStream {
|
|||
|
||||
void flush(); /// Flush pending output if appropriate.
|
||||
void close(); /// Close the stream, flushing output if appropriate.
|
||||
bool isOpen(); /// Return true if the stream is currently open.
|
||||
@property bool isOpen(); /// Return true if the stream is currently open.
|
||||
}
|
||||
|
||||
|
||||
|
@ -1029,7 +1029,7 @@ class Stream : InputStream, OutputStream {
|
|||
}
|
||||
|
||||
// returns estimated number of bytes available for immediate reading
|
||||
size_t available() { return 0; }
|
||||
@property size_t available() { return 0; }
|
||||
|
||||
/***
|
||||
* Write up to size bytes from buffer in the stream, returning the actual
|
||||
|
@ -1198,9 +1198,9 @@ class Stream : InputStream, OutputStream {
|
|||
*/
|
||||
void copyFrom(Stream s) {
|
||||
if (seekable) {
|
||||
ulong pos = s.position();
|
||||
ulong pos = s.position;
|
||||
s.position(0);
|
||||
copyFrom(s, s.size());
|
||||
copyFrom(s, s.size);
|
||||
s.position(pos);
|
||||
} else {
|
||||
ubyte[128] buf;
|
||||
|
@ -1246,37 +1246,37 @@ class Stream : InputStream, OutputStream {
|
|||
/***
|
||||
* Sets file position. Equivalent to calling seek(pos, SeekPos.Set).
|
||||
*/
|
||||
void position(ulong pos) { seek(cast(long)pos, SeekPos.Set); }
|
||||
@property void position(ulong pos) { seek(cast(long)pos, SeekPos.Set); }
|
||||
|
||||
/***
|
||||
* Returns current file position. Equivalent to seek(0, SeekPos.Current).
|
||||
*/
|
||||
ulong position() { return seek(0, SeekPos.Current); }
|
||||
@property ulong position() { return seek(0, SeekPos.Current); }
|
||||
|
||||
/***
|
||||
* Retrieve the size of the stream in bytes.
|
||||
* The stream must be seekable or a SeekException is thrown.
|
||||
*/
|
||||
ulong size() {
|
||||
@property ulong size() {
|
||||
assertSeekable();
|
||||
ulong pos = position(), result = seek(0, SeekPos.End);
|
||||
ulong pos = position, result = seek(0, SeekPos.End);
|
||||
position(pos);
|
||||
return result;
|
||||
}
|
||||
|
||||
// returns true if end of stream is reached, false otherwise
|
||||
bool eof() {
|
||||
@property bool eof() {
|
||||
// for unseekable streams we only know the end when we read it
|
||||
if (readEOF && !ungetAvailable())
|
||||
return true;
|
||||
else if (seekable)
|
||||
return position() == size();
|
||||
return position == size;
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
// returns true if the stream is open
|
||||
bool isOpen() { return isopen; }
|
||||
@property bool isOpen() { return isopen; }
|
||||
|
||||
// flush the buffer if writeable
|
||||
void flush() {
|
||||
|
@ -1304,9 +1304,9 @@ class Stream : InputStream, OutputStream {
|
|||
size_t blockSize;
|
||||
char[] result;
|
||||
if (seekable) {
|
||||
ulong orig_pos = position();
|
||||
ulong orig_pos = position;
|
||||
position(0);
|
||||
blockSize = cast(size_t)size();
|
||||
blockSize = cast(size_t)size;
|
||||
result = new char[blockSize];
|
||||
while (blockSize > 0) {
|
||||
rdlen = readBlock(&result[pos], blockSize);
|
||||
|
@ -1333,10 +1333,10 @@ class Stream : InputStream, OutputStream {
|
|||
override size_t toHash() {
|
||||
if (!readable || !seekable)
|
||||
return super.toHash();
|
||||
ulong pos = position();
|
||||
ulong pos = position;
|
||||
uint crc = init_crc32 ();
|
||||
position(0);
|
||||
ulong len = size();
|
||||
ulong len = size;
|
||||
for (ulong i = 0; i < len; i++) {
|
||||
ubyte c;
|
||||
read(c);
|
||||
|
@ -1419,7 +1419,7 @@ class FilterStream : Stream {
|
|||
readable = s.readable;
|
||||
writeable = s.writeable;
|
||||
seekable = s.seekable;
|
||||
isopen = s.isOpen();
|
||||
isopen = s.isOpen;
|
||||
} else {
|
||||
readable = writeable = seekable = false;
|
||||
isopen = false;
|
||||
|
@ -1454,7 +1454,7 @@ class FilterStream : Stream {
|
|||
return s.seek(offset,whence);
|
||||
}
|
||||
|
||||
override size_t available () { return s.available(); }
|
||||
override @property size_t available() { return s.available; }
|
||||
override void flush() { super.flush(); s.flush(); }
|
||||
}
|
||||
|
||||
|
@ -1744,13 +1744,13 @@ class BufferedStream : FilterStream {
|
|||
}
|
||||
|
||||
// returns size of stream
|
||||
override ulong size() {
|
||||
override @property ulong size() {
|
||||
if (bufferDirty) flush();
|
||||
return s.size();
|
||||
return s.size;
|
||||
}
|
||||
|
||||
// returns estimated number of bytes available for immediate reading
|
||||
override size_t available() {
|
||||
override @property size_t available() {
|
||||
return bufferLen - bufferCurPos;
|
||||
}
|
||||
}
|
||||
|
@ -1943,7 +1943,7 @@ class File: Stream {
|
|||
|
||||
version (Win32) {
|
||||
// returns size of stream
|
||||
override ulong size() {
|
||||
override @property ulong size() {
|
||||
assertSeekable();
|
||||
uint sizehi;
|
||||
uint sizelow = GetFileSize(hFile,&sizehi);
|
||||
|
@ -2002,7 +2002,7 @@ class File: Stream {
|
|||
* otherwise returns 0.
|
||||
*/
|
||||
|
||||
override size_t available() {
|
||||
override @property size_t available() {
|
||||
if (seekable) {
|
||||
ulong lavail = size - position;
|
||||
if (lavail > size_t.max) lavail = size_t.max;
|
||||
|
@ -2027,9 +2027,9 @@ class File: Stream {
|
|||
file.write(i);
|
||||
// string#1 + string#2 + int should give exacly that
|
||||
version (Win32)
|
||||
assert(file.position() == 19 + 13 + 4);
|
||||
assert(file.position == 19 + 13 + 4);
|
||||
version (Posix)
|
||||
assert(file.position() == 18 + 13 + 4);
|
||||
assert(file.position == 18 + 13 + 4);
|
||||
// we must be at the end of file
|
||||
assert(file.eof());
|
||||
file.close();
|
||||
|
@ -2047,17 +2047,17 @@ class File: Stream {
|
|||
// jump over "Hello, "
|
||||
file.seek(7, SeekPos.Current);
|
||||
version (Win32)
|
||||
assert(file.position() == 19 + 7);
|
||||
assert(file.position == 19 + 7);
|
||||
version (Posix)
|
||||
assert(file.position() == 18 + 7);
|
||||
assert(file.position == 18 + 7);
|
||||
assert(!std.string.cmp(file.readString(6), "world!"));
|
||||
i = 0; file.read(i);
|
||||
assert(i == 666);
|
||||
// string#1 + string#2 + int should give exacly that
|
||||
version (Win32)
|
||||
assert(file.position() == 19 + 13 + 4);
|
||||
assert(file.position == 19 + 13 + 4);
|
||||
version (Posix)
|
||||
assert(file.position() == 18 + 13 + 4);
|
||||
assert(file.position == 18 + 13 + 4);
|
||||
// we must be at the end of file
|
||||
assert(file.eof());
|
||||
file.close();
|
||||
|
@ -2144,37 +2144,37 @@ class BufferedFile: BufferedStream {
|
|||
file.write(i);
|
||||
// string#1 + string#2 + int should give exacly that
|
||||
version (Win32)
|
||||
assert(file.position() == 19 + 13 + 4);
|
||||
assert(file.position == 19 + 13 + 4);
|
||||
version (Posix)
|
||||
assert(file.position() == 18 + 13 + 4);
|
||||
assert(file.position == 18 + 13 + 4);
|
||||
// we must be at the end of file
|
||||
assert(file.eof());
|
||||
long oldsize = cast(long)file.size();
|
||||
long oldsize = cast(long)file.size;
|
||||
file.close();
|
||||
// no operations are allowed when file is closed
|
||||
assert(!file.readable && !file.writeable && !file.seekable);
|
||||
file.open("stream.$$$");
|
||||
// should be ok to read
|
||||
assert(file.readable);
|
||||
// test getc/ungetc and size()
|
||||
// test getc/ungetc and size
|
||||
char c1 = file.getc();
|
||||
file.ungetc(c1);
|
||||
assert( file.size() == oldsize );
|
||||
assert( file.size == oldsize );
|
||||
assert(!std.string.cmp(file.readLine(), "Testing stream.d:"));
|
||||
// jump over "Hello, "
|
||||
file.seek(7, SeekPos.Current);
|
||||
version (Win32)
|
||||
assert(file.position() == 19 + 7);
|
||||
assert(file.position == 19 + 7);
|
||||
version (Posix)
|
||||
assert(file.position() == 18 + 7);
|
||||
assert(file.position == 18 + 7);
|
||||
assert(!std.string.cmp(file.readString(6), "world!"));
|
||||
i = 0; file.read(i);
|
||||
assert(i == 666);
|
||||
// string#1 + string#2 + int should give exacly that
|
||||
version (Win32)
|
||||
assert(file.position() == 19 + 13 + 4);
|
||||
assert(file.position == 19 + 13 + 4);
|
||||
version (Posix)
|
||||
assert(file.position() == 18 + 13 + 4);
|
||||
assert(file.position == 18 + 13 + 4);
|
||||
// we must be at the end of file
|
||||
assert(file.eof());
|
||||
file.close();
|
||||
|
@ -2420,7 +2420,7 @@ class EndianStream : FilterStream {
|
|||
}
|
||||
|
||||
override bool eof() { return s.eof() && !ungetAvailable(); }
|
||||
override ulong size() { return s.size(); }
|
||||
override @property ulong size() { return s.size; }
|
||||
|
||||
unittest {
|
||||
MemoryStream m;
|
||||
|
@ -2477,15 +2477,15 @@ class EndianStream : FilterStream {
|
|||
assert( x3[11] == 1 );
|
||||
}
|
||||
em.writeBOM(BOM.UTF8);
|
||||
assert( m.position() == 3 );
|
||||
assert( m.position == 3 );
|
||||
assert( m.data[0] == 0xEF );
|
||||
assert( m.data[1] == 0xBB );
|
||||
assert( m.data[2] == 0xBF );
|
||||
em.writeString ("Hello, world");
|
||||
em.position(0);
|
||||
assert( m.position() == 0 );
|
||||
assert( em.readBOM == BOM.UTF8 );
|
||||
assert( m.position() == 3 );
|
||||
assert( m.position == 0 );
|
||||
assert( em.readBOM() == BOM.UTF8 );
|
||||
assert( m.position == 3 );
|
||||
assert( em.getc() == 'H' );
|
||||
em.position(0);
|
||||
em.writeBOM(BOM.UTF16BE);
|
||||
|
@ -2498,7 +2498,7 @@ class EndianStream : FilterStream {
|
|||
em.position(0);
|
||||
em.writeString ("Hello, world");
|
||||
em.position(0);
|
||||
assert( em.readBOM == -1 );
|
||||
assert( em.readBOM() == -1 );
|
||||
assert( em.getc() == 'H' );
|
||||
assert( em.getc() == 'e' );
|
||||
assert( em.getc() == 'l' );
|
||||
|
@ -2581,10 +2581,10 @@ class TArrayStream(Buffer): Stream {
|
|||
return cur;
|
||||
}
|
||||
|
||||
override size_t available () { return cast(size_t)(len - cur); }
|
||||
override @property size_t available () { return cast(size_t)(len - cur); }
|
||||
|
||||
/// Get the current memory data in total.
|
||||
ubyte[] data() {
|
||||
@property ubyte[] data() {
|
||||
if (len > size_t.max)
|
||||
throw new StreamException("Stream too big");
|
||||
const(void)[] res = buf[0 .. cast(size_t)len];
|
||||
|
@ -2593,7 +2593,7 @@ class TArrayStream(Buffer): Stream {
|
|||
|
||||
override string toString() {
|
||||
// assume data is UTF8
|
||||
return to!(string)(cast(char[]) data);
|
||||
return to!(string)(cast(char[])data);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2613,14 +2613,14 @@ unittest {
|
|||
assert (m.available == 96);
|
||||
assert (m.seekEnd (-8) == 92);
|
||||
assert (m.available == 8);
|
||||
assert (m.size () == 100);
|
||||
assert (m.size == 100);
|
||||
assert (m.seekSet (4) == 4);
|
||||
assert (m.readString (4) == "o, w");
|
||||
m.writeString ("ie");
|
||||
assert (buf[0..12] == "Hello, wield");
|
||||
assert (m.position == 10);
|
||||
assert (m.available == 90);
|
||||
assert (m.size () == 100);
|
||||
assert (m.size == 100);
|
||||
}
|
||||
|
||||
/// This subclass reads and constructs an array of bytes in memory.
|
||||
|
@ -2662,7 +2662,7 @@ class MemoryStream: TArrayStream!(ubyte[]) {
|
|||
assert (m.available == 8);
|
||||
assert (m.seekEnd (-8) == 4);
|
||||
assert (m.available == 8);
|
||||
assert (m.size () == 12);
|
||||
assert (m.size == 12);
|
||||
assert (m.readString (4) == "o, w");
|
||||
m.writeString ("ie");
|
||||
assert (cast(char[]) m.data () == "Hello, wield");
|
||||
|
@ -2675,7 +2675,7 @@ class MemoryStream: TArrayStream!(ubyte[]) {
|
|||
m.position = 0;
|
||||
assert (m.available == 42);
|
||||
m.writef("%d %d %s",100,345,"hello");
|
||||
auto str = m.toString;
|
||||
auto str = m.toString();
|
||||
assert (str[0..13] == "100 345 hello", str[0 .. 13]);
|
||||
assert (m.available == 29);
|
||||
assert (m.position == 13);
|
||||
|
@ -2685,12 +2685,12 @@ class MemoryStream: TArrayStream!(ubyte[]) {
|
|||
m2 = new MemoryStream ();
|
||||
m2.writeString("before");
|
||||
m2.copyFrom(m,10);
|
||||
str = m2.toString;
|
||||
str = m2.toString();
|
||||
assert (str[0..16] == "before 345 hello");
|
||||
m2.position = 3;
|
||||
m2.copyFrom(m);
|
||||
auto str2 = m.toString;
|
||||
str = m2.toString;
|
||||
auto str2 = m.toString();
|
||||
str = m2.toString();
|
||||
assert (str == ("bef" ~ str2));
|
||||
}
|
||||
}
|
||||
|
@ -2706,7 +2706,7 @@ class MmFileStream : TArrayStream!(MmFile) {
|
|||
/// Create stream wrapper for file.
|
||||
this(MmFile file) {
|
||||
super (file);
|
||||
MmFile.Mode mode = file.mode;
|
||||
MmFile.Mode mode = file.mode();
|
||||
writeable = mode > MmFile.Mode.read;
|
||||
}
|
||||
|
||||
|
@ -2735,7 +2735,7 @@ unittest {
|
|||
assert (m.seekSet (0) == 0);
|
||||
assert (m.seekCur (4) == 4);
|
||||
assert (m.seekEnd (-8) == 92);
|
||||
assert (m.size () == 100);
|
||||
assert (m.size == 100);
|
||||
assert (m.seekSet (4));
|
||||
assert (m.readString (4) == "o, w");
|
||||
m.writeString ("ie");
|
||||
|
@ -2783,7 +2783,7 @@ class SliceStream : FilterStream {
|
|||
*/
|
||||
this (Stream s, ulong low)
|
||||
in {
|
||||
assert (low <= s.size ());
|
||||
assert (low <= s.size);
|
||||
}
|
||||
body {
|
||||
super(s);
|
||||
|
@ -2801,7 +2801,7 @@ class SliceStream : FilterStream {
|
|||
this (Stream s, ulong low, ulong high)
|
||||
in {
|
||||
assert (low <= high);
|
||||
assert (high <= s.size ());
|
||||
assert (high <= s.size);
|
||||
}
|
||||
body {
|
||||
super(s);
|
||||
|
@ -2881,7 +2881,7 @@ class SliceStream : FilterStream {
|
|||
return pos;
|
||||
}
|
||||
|
||||
override size_t available () {
|
||||
override @property size_t available() {
|
||||
size_t res = s.available;
|
||||
ulong bp = s.position;
|
||||
if (bp <= pos+low && pos+low <= bp+res) {
|
||||
|
@ -2899,7 +2899,7 @@ class SliceStream : FilterStream {
|
|||
|
||||
m = new MemoryStream ((cast(char[])"Hello, world").dup);
|
||||
s = new SliceStream (m, 4, 8);
|
||||
assert (s.size () == 4);
|
||||
assert (s.size == 4);
|
||||
assert (m.position () == 0);
|
||||
assert (s.position () == 0);
|
||||
assert (m.available == 12);
|
||||
|
@ -2925,7 +2925,7 @@ class SliceStream : FilterStream {
|
|||
assert (s.available == 0);
|
||||
|
||||
s = new SliceStream (m, 4);
|
||||
assert (s.size () == 14);
|
||||
assert (s.size == 14);
|
||||
assert (s.toString () == "Vrooorld\nBlaho");
|
||||
s.seekEnd (0);
|
||||
assert (s.available == 0);
|
||||
|
@ -2933,9 +2933,9 @@ class SliceStream : FilterStream {
|
|||
s.writeString (", etcetera.");
|
||||
assert (s.position () == 25);
|
||||
assert (s.seekSet (0) == 0);
|
||||
assert (s.size () == 25);
|
||||
assert (s.size == 25);
|
||||
assert (m.position () == 18);
|
||||
assert (m.size () == 29);
|
||||
assert (m.size == 29);
|
||||
assert (m.toString() == "HellVrooorld\nBlaho, etcetera.");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2873,7 +2873,7 @@ unittest {
|
|||
|
||||
struct Range
|
||||
{
|
||||
uint front() { assert(0); }
|
||||
@property uint front() { assert(0); }
|
||||
void popFront() { assert(0); }
|
||||
enum bool empty = false;
|
||||
}
|
||||
|
|
|
@ -550,7 +550,7 @@ unittest
|
|||
nosh[0] = 5;
|
||||
nosh[1] = 0;
|
||||
assert(nosh[0] == 5 && nosh[1] == 0);
|
||||
assert(nosh.toString == "Tuple!(int,real)(5, 0)", nosh.toString);
|
||||
assert(nosh.toString() == "Tuple!(int,real)(5, 0)", nosh.toString());
|
||||
Tuple!(int, int) yessh;
|
||||
nosh = yessh;
|
||||
}
|
||||
|
@ -559,7 +559,7 @@ unittest
|
|||
t[0] = 10;
|
||||
t[1] = "str";
|
||||
assert(t[0] == 10 && t[1] == "str");
|
||||
assert(t.toString == `Tuple!(int,string)(10, "str")`, t.toString);
|
||||
assert(t.toString() == `Tuple!(int,string)(10, "str")`, t.toString());
|
||||
}
|
||||
{
|
||||
Tuple!(int, "a", double, "b") x;
|
||||
|
@ -973,7 +973,10 @@ Rebindable!(T) rebindable(T)(Rebindable!(T) obj)
|
|||
unittest
|
||||
{
|
||||
interface CI { const int foo(); }
|
||||
class C : CI { int foo() const { return 42; } }
|
||||
class C : CI {
|
||||
int foo() const { return 42; }
|
||||
@property int bar() const { return 23; }
|
||||
}
|
||||
Rebindable!(C) obj0;
|
||||
static assert(is(typeof(obj0) == C));
|
||||
|
||||
|
@ -992,7 +995,8 @@ unittest
|
|||
assert(obj1.get !is null);
|
||||
|
||||
// test opDot
|
||||
assert(obj2.foo == 42);
|
||||
assert(obj2.foo() == 42);
|
||||
assert(obj2.bar == 23);
|
||||
|
||||
interface I { final int foo() const { return 42; } }
|
||||
Rebindable!(I) obj3;
|
||||
|
@ -1017,16 +1021,16 @@ unittest
|
|||
|
||||
auto obj6 = rebindable(new immutable(C));
|
||||
static assert(is(typeof(obj6) == Rebindable!(immutable C)));
|
||||
assert(obj6.foo == 42);
|
||||
assert(obj6.foo() == 42);
|
||||
|
||||
auto obj7 = rebindable(new C);
|
||||
CI interface1 = obj7;
|
||||
auto interfaceRebind1 = rebindable(interface1);
|
||||
assert(interfaceRebind1.foo == 42);
|
||||
assert(interfaceRebind1.foo() == 42);
|
||||
|
||||
const interface2 = interface1;
|
||||
auto interfaceRebind2 = rebindable(interface2);
|
||||
assert(interfaceRebind2.foo == 42);
|
||||
assert(interfaceRebind2.foo() == 42);
|
||||
|
||||
auto arr = [1,2,3,4,5];
|
||||
const arrConst = arr;
|
||||
|
@ -1108,7 +1112,7 @@ struct Ref(T)
|
|||
this(ref T value) { _p = &value; }
|
||||
ref T opDot() { return *_p; }
|
||||
/*ref*/ T opImplicitCastTo() { return *_p; }
|
||||
ref T value() { return *_p; }
|
||||
@property ref T value() { return *_p; }
|
||||
|
||||
void opAssign(T value)
|
||||
{
|
||||
|
@ -2753,7 +2757,7 @@ unittest
|
|||
class A { static bool dead; ~this() { dead = true; } }
|
||||
class B : A { static bool dead; ~this() { dead = true; } }
|
||||
{
|
||||
auto b = scoped!B;
|
||||
auto b = scoped!B();
|
||||
}
|
||||
assert(B.dead, "asdasd");
|
||||
assert(A.dead, "asdasd");
|
||||
|
@ -2770,7 +2774,7 @@ unittest
|
|||
bool check() { return this is a; }
|
||||
}
|
||||
|
||||
auto a1 = scoped!A;
|
||||
auto a1 = scoped!A();
|
||||
assert(a1.check());
|
||||
|
||||
auto a2 = scoped!A(1);
|
||||
|
|
|
@ -380,9 +380,9 @@ private:
|
|||
// TODO: The following test evaluates to true for shared objects.
|
||||
// Use __traits for now until this is sorted out.
|
||||
// else static if (is(typeof((*zis).toString)))
|
||||
else static if (__traits(compiles, {(*zis).toString;}))
|
||||
else static if (__traits(compiles, {(*zis).toString();}))
|
||||
{
|
||||
*target = (*zis).toString;
|
||||
*target = (*zis).toString();
|
||||
break;
|
||||
}
|
||||
else
|
||||
|
@ -560,7 +560,7 @@ public:
|
|||
* ----
|
||||
*/
|
||||
|
||||
bool hasValue() const
|
||||
@property bool hasValue() const
|
||||
{
|
||||
// @@@BUG@@@ in compiler, the cast shouldn't be needed
|
||||
return cast(typeof(&handler!(void))) fptr != &handler!(void);
|
||||
|
@ -582,7 +582,7 @@ public:
|
|||
* assert(a == 6);
|
||||
* ----
|
||||
*/
|
||||
T * peek(T)()
|
||||
@property T * peek(T)()
|
||||
{
|
||||
static if (!is(T == void))
|
||||
static assert(allowed!(T), "Cannot store a " ~ T.stringof
|
||||
|
@ -594,7 +594,7 @@ public:
|
|||
* Returns the $(D_PARAM typeid) of the currently held value.
|
||||
*/
|
||||
|
||||
TypeInfo type() const
|
||||
@property TypeInfo type() const
|
||||
{
|
||||
TypeInfo result;
|
||||
fptr(OpID.getTypeInfo, null, &result);
|
||||
|
@ -608,7 +608,7 @@ public:
|
|||
* $(LINK2 std_traits.html#ImplicitConversionTargets,ImplicitConversionTargets).
|
||||
*/
|
||||
|
||||
bool convertsTo(T)()
|
||||
@property bool convertsTo(T)()
|
||||
{
|
||||
TypeInfo info = typeid(T);
|
||||
return fptr(OpID.testConversion, null, &info) == 0;
|
||||
|
@ -648,7 +648,7 @@ public:
|
|||
* VariantException).
|
||||
*/
|
||||
|
||||
T get(T)() if (!is(T == const))
|
||||
@property T get(T)() if (!is(T == const))
|
||||
{
|
||||
union Buf
|
||||
{
|
||||
|
@ -664,7 +664,7 @@ public:
|
|||
return buf.result;
|
||||
}
|
||||
|
||||
T get(T)() const if (is(T == const))
|
||||
@property T get(T)() const if (is(T == const))
|
||||
{
|
||||
union Buf
|
||||
{
|
||||
|
@ -690,7 +690,7 @@ public:
|
|||
* VariantException).
|
||||
*/
|
||||
|
||||
T coerce(T)()
|
||||
@property T coerce(T)()
|
||||
{
|
||||
static if (isNumeric!(T))
|
||||
{
|
||||
|
@ -716,7 +716,7 @@ public:
|
|||
}
|
||||
else static if (isSomeString!(T))
|
||||
{
|
||||
return to!(T)(toString);
|
||||
return to!(T)(toString());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1168,8 +1168,8 @@ static class VariantException : Exception
|
|||
this(TypeInfo source, TypeInfo target)
|
||||
{
|
||||
super("Variant: attempting to use incompatible types "
|
||||
~ source.toString
|
||||
~ " and " ~ target.toString);
|
||||
~ source.toString()
|
||||
~ " and " ~ target.toString());
|
||||
this.source = source;
|
||||
this.target = target;
|
||||
}
|
||||
|
@ -1230,7 +1230,7 @@ unittest
|
|||
// assign
|
||||
a = *b.peek!(int);
|
||||
// comparison
|
||||
assert(a == b, a.type.toString ~ " " ~ b.type.toString);
|
||||
assert(a == b, a.type.toString() ~ " " ~ b.type.toString());
|
||||
auto c = Variant("this is a string");
|
||||
assert(a != c);
|
||||
// comparison via implicit conversions
|
||||
|
@ -1250,8 +1250,8 @@ unittest
|
|||
assert(failed); // :o)
|
||||
|
||||
// toString tests
|
||||
a = Variant(42); assert(a.toString == "42");
|
||||
a = Variant(42.22); assert(a.toString == "42.22");
|
||||
a = Variant(42); assert(a.toString() == "42");
|
||||
a = Variant(42.22); assert(a.toString() == "42.22");
|
||||
|
||||
// coerce tests
|
||||
a = Variant(42.22); assert(a.coerce!(int) == 42);
|
||||
|
@ -1272,7 +1272,7 @@ unittest
|
|||
// a = Big.init;
|
||||
|
||||
// hash
|
||||
assert(a.toHash != 0);
|
||||
assert(a.toHash() != 0);
|
||||
}
|
||||
|
||||
// tests adapted from
|
||||
|
|
70
std/xml.d
70
std/xml.d
|
@ -73,12 +73,12 @@ void main()
|
|||
Book book;
|
||||
book.id = xml.tag.attr["id"];
|
||||
|
||||
xml.onEndTag["author"] = (in Element e) { book.author = e.text; };
|
||||
xml.onEndTag["title"] = (in Element e) { book.title = e.text; };
|
||||
xml.onEndTag["genre"] = (in Element e) { book.genre = e.text; };
|
||||
xml.onEndTag["price"] = (in Element e) { book.price = e.text; };
|
||||
xml.onEndTag["publish-date"] = (in Element e) { book.pubDate = e.text; };
|
||||
xml.onEndTag["description"] = (in Element e) { book.description = e.text; };
|
||||
xml.onEndTag["author"] = (in Element e) { book.author = e.text(); };
|
||||
xml.onEndTag["title"] = (in Element e) { book.title = e.text(); };
|
||||
xml.onEndTag["genre"] = (in Element e) { book.genre = e.text(); };
|
||||
xml.onEndTag["price"] = (in Element e) { book.price = e.text(); };
|
||||
xml.onEndTag["publish-date"] = (in Element e) { book.pubDate = e.text(); };
|
||||
xml.onEndTag["description"] = (in Element e) { book.description = e.text(); };
|
||||
|
||||
xml.parse();
|
||||
|
||||
|
@ -639,7 +639,7 @@ class Document : Element
|
|||
*/
|
||||
override string toString()
|
||||
{
|
||||
return prolog ~ super.toString ~ epilog;
|
||||
return prolog ~ super.toString() ~ epilog;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -863,7 +863,7 @@ class Element : Item
|
|||
*/
|
||||
override hash_t toHash()
|
||||
{
|
||||
hash_t hash = tag.toHash;
|
||||
hash_t hash = tag.toHash();
|
||||
foreach(item;items) hash += item.toHash();
|
||||
return hash;
|
||||
}
|
||||
|
@ -888,8 +888,8 @@ class Element : Item
|
|||
foreach(item;items)
|
||||
{
|
||||
Text t = cast(Text)item;
|
||||
if (t is null) throw new DecodeException(item.toString);
|
||||
buffer ~= decode(t.toString,mode);
|
||||
if (t is null) throw new DecodeException(item.toString());
|
||||
buffer ~= decode(t.toString(),mode);
|
||||
}
|
||||
return buffer;
|
||||
}
|
||||
|
@ -904,18 +904,18 @@ class Element : Item
|
|||
override string[] pretty(uint indent=2)
|
||||
{
|
||||
|
||||
if (isEmptyXML) return [ tag.toEmptyString ];
|
||||
if (isEmptyXML) return [ tag.toEmptyString() ];
|
||||
|
||||
if (items.length == 1)
|
||||
{
|
||||
Text t = cast(Text)(items[0]);
|
||||
if (t !is null)
|
||||
{
|
||||
return [tag.toStartString ~ t.toString ~ tag.toEndString];
|
||||
return [tag.toStartString() ~ t.toString() ~ tag.toEndString()];
|
||||
}
|
||||
}
|
||||
|
||||
string[] a = [ tag.toStartString ];
|
||||
string[] a = [ tag.toStartString() ];
|
||||
foreach(item;items)
|
||||
{
|
||||
string[] b = item.pretty(indent);
|
||||
|
@ -924,7 +924,7 @@ class Element : Item
|
|||
a ~= rightJustify(s,s.length + indent);
|
||||
}
|
||||
}
|
||||
a ~= tag.toEndString;
|
||||
a ~= tag.toEndString();
|
||||
return a;
|
||||
}
|
||||
|
||||
|
@ -934,20 +934,20 @@ class Element : Item
|
|||
* Examples:
|
||||
* --------------
|
||||
* auto element = new Element("br");
|
||||
* writefln(element.toString); // writes "<br />"
|
||||
* writefln(element.toString()); // writes "<br />"
|
||||
* --------------
|
||||
*/
|
||||
override string toString()
|
||||
{
|
||||
if (isEmptyXML) return tag.toEmptyString;
|
||||
if (isEmptyXML) return tag.toEmptyString();
|
||||
|
||||
string buffer = tag.toStartString;
|
||||
foreach (item;items) { buffer ~= item.toString; }
|
||||
buffer ~= tag.toEndString;
|
||||
string buffer = tag.toStartString();
|
||||
foreach (item;items) { buffer ~= item.toString(); }
|
||||
buffer ~= tag.toEndString();
|
||||
return buffer;
|
||||
}
|
||||
|
||||
override bool isEmptyXML() { return items.length == 0; }
|
||||
override @property bool isEmptyXML() { return items.length == 0; }
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -991,14 +991,14 @@ class Tag
|
|||
|
||||
s = name;
|
||||
try { checkName(s,t); }
|
||||
catch(Err e) { assert(false,"Invalid tag name:" ~ e.toString); }
|
||||
catch(Err e) { assert(false,"Invalid tag name:" ~ e.toString()); }
|
||||
|
||||
foreach(k,v;attr)
|
||||
{
|
||||
s = k;
|
||||
try { checkName(s,t); }
|
||||
catch(Err e)
|
||||
{ assert(false,"Invalid atrribute name:" ~ e.toString); }
|
||||
{ assert(false,"Invalid atrribute name:" ~ e.toString()); }
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1133,7 +1133,7 @@ class Tag
|
|||
* Examples:
|
||||
* --------------
|
||||
* auto tag = new Tag("book",TagType.START);
|
||||
* writefln(tag.toString); // writes "<book>"
|
||||
* writefln(tag.toString()); // writes "<book>"
|
||||
* --------------
|
||||
*/
|
||||
override string toString()
|
||||
|
@ -1167,7 +1167,7 @@ class Tag
|
|||
* if (tag.isStart) { }
|
||||
* --------------
|
||||
*/
|
||||
bool isStart() { return type == TagType.START; }
|
||||
@property bool isStart() { return type == TagType.START; }
|
||||
|
||||
/**
|
||||
* Returns true if the Tag is an end tag
|
||||
|
@ -1177,7 +1177,7 @@ class Tag
|
|||
* if (tag.isEnd) { }
|
||||
* --------------
|
||||
*/
|
||||
bool isEnd() { return type == TagType.END; }
|
||||
@property bool isEnd() { return type == TagType.END; }
|
||||
|
||||
/**
|
||||
* Returns true if the Tag is an empty tag
|
||||
|
@ -1187,7 +1187,7 @@ class Tag
|
|||
* if (tag.isEmpty) { }
|
||||
* --------------
|
||||
*/
|
||||
bool isEmpty() { return type == TagType.EMPTY; }
|
||||
@property bool isEmpty() { return type == TagType.EMPTY; }
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1269,7 +1269,7 @@ class Comment : Item
|
|||
*/
|
||||
override const string toString() { return "<!--" ~ content ~ "-->"; }
|
||||
|
||||
override const bool isEmptyXML() { return false; } /// Returns false always
|
||||
override @property const bool isEmptyXML() { return false; } /// Returns false always
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1348,7 +1348,7 @@ class CData : Item
|
|||
*/
|
||||
override const string toString() { return cdata ~ content ~ "]]>"; }
|
||||
|
||||
override const bool isEmptyXML() { return false; } /// Returns false always
|
||||
override @property const bool isEmptyXML() { return false; } /// Returns false always
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1428,7 +1428,7 @@ class Text : Item
|
|||
/**
|
||||
* Returns true if the content is the empty string
|
||||
*/
|
||||
override const bool isEmptyXML() { return content.length == 0; }
|
||||
override @property const bool isEmptyXML() { return content.length == 0; }
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1507,7 +1507,7 @@ class XMLInstruction : Item
|
|||
*/
|
||||
override const string toString() { return "<!" ~ content ~ ">"; }
|
||||
|
||||
override const bool isEmptyXML() { return false; } /// Returns false always
|
||||
override @property const bool isEmptyXML() { return false; } /// Returns false always
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1586,7 +1586,7 @@ class ProcessingInstruction : Item
|
|||
*/
|
||||
override const string toString() { return "<?" ~ content ~ "?>"; }
|
||||
|
||||
override const bool isEmptyXML() { return false; } /// Returns false always
|
||||
override @property const bool isEmptyXML() { return false; } /// Returns false always
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1619,7 +1619,7 @@ abstract class Item
|
|||
}
|
||||
|
||||
/// Returns true if the item represents empty XML text
|
||||
abstract const bool isEmptyXML();
|
||||
abstract @property const bool isEmptyXML();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1725,7 +1725,7 @@ class ElementParser
|
|||
* The Tag at the start of the element being parsed. You can read this to
|
||||
* determine the tag's name and attributes.
|
||||
*/
|
||||
const const(Tag) tag() { return tag_; }
|
||||
const @property const(Tag) tag() { return tag_; }
|
||||
|
||||
/**
|
||||
* Register a handler which will be called whenever a start tag is
|
||||
|
@ -2718,7 +2718,7 @@ EOS";
|
|||
};
|
||||
|
||||
xml.onEndTag["Test"] = (in Element e) {
|
||||
assert(e.text == "What & Up Second");
|
||||
assert(e.text() == "What & Up Second");
|
||||
};
|
||||
xml.parse();
|
||||
}
|
||||
|
@ -2800,7 +2800,7 @@ class CheckException : XMLException
|
|||
if (line != 0) s = format("Line %d, column %d: ",line,column);
|
||||
s ~= msg;
|
||||
s ~= '\n';
|
||||
if (err !is null) s = err.toString ~ s;
|
||||
if (err !is null) s = err.toString() ~ s;
|
||||
return s;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue