More on boxer
    bearophile 
    bearophileHUGS at lycos.com
       
    Thu Apr 17 02:26:58 PDT 2008
    
    
  
I think I may have found another problem with boxer/writefln:
import std.stdio: writefln;
import std.boxer: box, Box;
import d.func: putr;
void main() {
  auto a = new Box[1];
  a[0] = box(a);
  writefln(a); // Error: Stack Overflow
  putr(a); // Error: Stack Overflow
}
(I have to fix my str/repr/put/putr still for such situation).
Note that in Python there isn't such bug:
>>> a = [1, 2]
>>> a[1] = a
>>> print a
[1, [...]]
---------------------------------
I think cmp among arrays or Box is buggy so if you need it you may use something similar to the following (not much tested still):
import std.boxer: Box, boxArray;
import std.stdio: writefln;
int boxArrayCmp(Box[] ba1, Box[] ba2) {
    if (ba1.length < ba2.length) {
        foreach (i, field; ba1) {
            if (field < ba2[i])
                return -1;
            else
                if (field > ba2[i])
                return 1;
        }
        return -1;
    } else {
        foreach (i, field; ba2) {
            if (field < ba1[i])
                return 1;
            else
                if (field > ba1[i])
                return -1;
        }
        if (ba1.length == ba2.length)
            return 0;
        else
            return 1;
    }
}
void main() {
    auto b1 = boxArray(10, 20, 15.5);
    auto b2 = boxArray(10, 20, 15.6);
    auto b3 = boxArray(10, 20.0, 15.5);
    auto b4 = boxArray(10, 20.0);
    
    writefln(boxArrayCmp(b1, b2), " ", b1 < b2);  // -1 false
    writefln(boxArrayCmp(b2, b1), " ", b2 > b1);  // 1 false
    writefln(boxArrayCmp(b1, b3), " ", b1 == b3); // 0 false
    writefln(boxArrayCmp(b1, b4), " ", b1 > b4);  // 1 true
}
Bye,
bearophile
    
    
More information about the Digitalmars-d-learn
mailing list