Hello everybody,
Below I define two new types : Line and Poly. The Poly type is intended
for stacking some lines.
type Line
a::Float64 # intercept
b::BigFloat # slope
x1::BigFloat # x-coordinate of first vertex
y1::BigFloat # y-coordinate of first vertex
x2::BigFloat # x-coordinate of second vertex
y2::BigFloat # y-coordinate of second vertex
typ::Bool # type of the line (true:upper, false:lower)
end
type Poly
a::Vector{Float64}
b::Vector{BigFloat}
x1::Vector{BigFloat}
y1::Vector{BigFloat}
x2::Vector{BigFloat}
y2::Vector{BigFloat}
typ::Vector{Bool}
end
I also define the empty Poly:
emptyPoly = Poly(Array(Float64,0), Array(BigFloat,0), Array(BigFloat,0),
Array(BigFloat,0), Array(BigFloat,0), Array(BigFloat,0), Array(Bool,0));
And a function to generate a new Line:
function newLine(a::Float64, b::BigFloat, typ::Bool)
return Line(a, b, BigFloat(Inf), BigFloat(Inf), BigFloat(Inf),
BigFloat(Inf), typ)
end
Now I define some macros but it seems that I'm doing something bad :
macro addLine(poly, line)
for op = (:a, :b, :x1, :y1, :x2, :y2, :typ)
@eval $poly.$op = [$poly.$op, $line.$op]
end
end
macro removeLine(poly, index)
for op = (:a, :b, :x1, :y1, :x2, :y2, :typ)
@eval splice!($poly.$op, $index)
end
end
There's something bad when I'm doing this:
D = newLine(0.4, BigFloat("1.5"), false)
poly = emptyPoly;
@addLine poly D
*Question 1:* I don't understand why the previous code changes the value of
emptyPoly, as if poly and emptyPoly were linked:
julia> emptyPoly
Poly([0.4],[1.5e+00 with 256 bits of precision],[inf with 256 bits of
precision],[inf with 256 bits of precision],[inf with 256 bits of
precision],[inf with 256 bits of precision],[false])
*Question 2:* There's another problem when I'm using the removeLine macro
inside a loop :
@addLine poly D
@addLine poly D
for index = [1 2]
@removeLine(poly, index)
end
This code doesn't work and generates the error message "index not found".