1 /* This file is part of Shapes.
3 * Shapes is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
8 * Shapes is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
13 * You should have received a copy of the GNU General Public License
14 * along with Shapes. If not, see <http://www.gnu.org/licenses/>.
16 * Copyright 2008 Henrik Tidefelt
22 #include "shapesexceptions.h"
23 #include "lighttypes.h"
25 using namespace Shapes
;
29 RefCountPtr
< const Lang::Value
>
30 Ast::LessExpr::impl( DUMMYANDREF( const Lang::Symbol
) arg1
, DUMMYANDREF( const Lang::Symbol
) arg2
, const Kernel::PassedDyn
& dyn
) const
32 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( *arg1
< *arg2
) );
35 RefCountPtr
< const Lang::Value
>
36 Ast::LessExpr::impl( DUMMYANDREF( const Lang::Float
) arg1
, DUMMYANDREF( const Lang::Float
) arg2
, const Kernel::PassedDyn
& dyn
) const
38 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( arg1
->val_
< arg2
->val_
) );
41 RefCountPtr
< const Lang::Value
>
42 Ast::LessExpr::impl( DUMMYANDREF( const Lang::Integer
) arg1
, DUMMYANDREF( const Lang::Integer
) arg2
, const Kernel::PassedDyn
& dyn
) const
44 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( arg1
->val_
< arg2
->val_
) );
47 RefCountPtr
< const Lang::Value
>
48 Ast::LessExpr::impl( DUMMYANDREF( const Lang::Length
) arg1
, DUMMYANDREF( const Lang::Length
) arg2
, const Kernel::PassedDyn
& dyn
) const
50 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( arg1
->get( ) < arg2
->get( ) ) );
53 RefCountPtr
< const Lang::Value
>
54 Ast::LessExpr::impl( DUMMYANDREF( const Lang::Coords2D
) arg1
, DUMMYANDREF( const Lang::Coords2D
) arg2
, const Kernel::PassedDyn
& dyn
) const
56 Lang::PathPoint2D
* res
= new Lang::PathPoint2D( arg2
);
58 return Kernel::ValueRef( res
);
61 RefCountPtr
< const Lang::Value
>
62 Ast::LessExpr::impl( DUMMYANDREF( const Lang::Coords2D
) arg1
, DUMMYANDREF( const Lang::PathPoint2D
) arg2
, const Kernel::PassedDyn
& dyn
) const
64 Lang::PathPoint2D
* res
= new Lang::PathPoint2D( *arg2
);
65 if( res
->rear_
.getPtr( ) != 0 )
67 throw Exceptions::OutOfRange( this->loc( ), strrefdup( "Pathpoint already has a rear handle" ) );
70 return Kernel::ValueRef( res
);
73 RefCountPtr
< const Lang::Value
>
74 Ast::LessExpr::impl( DUMMYANDREF( const Lang::Coords2D
) arg1
, DUMMYANDREF( const Lang::PathSlider2D
) arg2
, const Kernel::PassedDyn
& dyn
) const
76 if( arg2
->getRear( ) != NullPtr
< const Lang::Value
>( ) )
78 throw Exceptions::OutOfRange( this->loc( ), strrefdup( "Slider already has a rear handle" ) );
80 return Kernel::ValueRef( new Lang::PathSlider2D_rear( *arg2
, arg1
) );
83 RefCountPtr
< const Lang::Value
>
84 Ast::LessExpr::impl( DUMMYANDREF( const Lang::PolarHandleBase
) arg1
, DUMMYANDREF( const Lang::Coords2D
) arg2
, const Kernel::PassedDyn
& dyn
) const
86 Lang::PathPoint2D
* res
= new Lang::PathPoint2D( arg2
);
88 return Kernel::ValueRef( res
);
91 RefCountPtr
< const Lang::Value
>
92 Ast::LessExpr::impl( DUMMYANDREF( const Lang::PolarHandleBase
) arg1
, DUMMYANDREF( const Lang::PathPoint2D
) arg2
, const Kernel::PassedDyn
& dyn
) const
94 Lang::PathPoint2D
* res
= new Lang::PathPoint2D( *arg2
);
95 if( res
->rear_
.getPtr( ) != 0 )
97 throw Exceptions::OutOfRange( this->loc( ), strrefdup( "Pathpoint already has a rear handle" ) );
100 return Kernel::ValueRef( res
);
103 RefCountPtr
< const Lang::Value
>
104 Ast::LessExpr::impl( DUMMYANDREF( const Lang::PolarHandleBase
) arg1
, DUMMYANDREF( const Lang::PathSlider2D
) arg2
, const Kernel::PassedDyn
& dyn
) const
106 if( arg2
->getRear( ) != NullPtr
< const Lang::Value
>( ) )
108 throw Exceptions::OutOfRange( this->loc( ), strrefdup( "Slider already has a rear handle" ) );
110 return Kernel::ValueRef( new Lang::PathSlider2D_rear( *arg2
, arg1
) );
113 RefCountPtr
< const Lang::Value
>
114 Ast::LessExpr::impl( DUMMYANDREF( const Lang::CornerCoords2D
) arg1
, DUMMYANDREF( const Lang::Coords2D
) arg2
, const Kernel::PassedDyn
& dyn
) const
116 throw Exceptions::MiscellaneousRequirement( strrefdup( "A handle mustn't have a default angle." ) );
119 RefCountPtr
< const Lang::Value
>
120 Ast::LessExpr::impl( DUMMYANDREF( const Lang::CornerCoords2D
) arg1
, DUMMYANDREF( const Lang::PathPoint2D
) arg2
, const Kernel::PassedDyn
& dyn
) const
122 throw Exceptions::MiscellaneousRequirement( strrefdup( "A handle mustn't have a default angle." ) );
125 RefCountPtr
< const Lang::Value
>
126 Ast::LessExpr::impl( DUMMYANDREF( const Lang::Coords3D
) arg1
, DUMMYANDREF( const Lang::Coords3D
) arg2
, const Kernel::PassedDyn
& dyn
) const
128 Lang::PathPoint3D
* res
= new Lang::PathPoint3D( arg2
);
130 return Kernel::ValueRef( res
);
133 RefCountPtr
< const Lang::Value
>
134 Ast::LessExpr::impl( DUMMYANDREF( const Lang::Coords3D
) arg1
, DUMMYANDREF( const Lang::PathPoint3D
) arg2
, const Kernel::PassedDyn
& dyn
) const
136 Lang::PathPoint3D
* res
= new Lang::PathPoint3D( *arg2
);
137 if( res
->rear_
.getPtr( ) != 0 )
139 throw Exceptions::OutOfRange( this->loc( ), strrefdup( "Pathpoint already has a rear handle" ) );
142 return Kernel::ValueRef( res
);
145 RefCountPtr
< const Lang::Value
>
146 Ast::LessExpr::impl( DUMMYANDREF( const Lang::Coords3D
) arg1
, DUMMYANDREF( const Lang::PathSlider3D
) arg2
, const Kernel::PassedDyn
& dyn
) const
148 if( arg2
->getRear( ) != NullPtr
< const Lang::Value
>( ) )
150 throw Exceptions::OutOfRange( this->loc( ), strrefdup( "Slider already has a rear handle" ) );
152 return Kernel::ValueRef( new Lang::PathSlider3D_rear( *arg2
, arg1
) );
156 RefCountPtr
< const Lang::Value
>
157 Ast::GreaterExpr::impl( DUMMYANDREF( const Lang::Symbol
) arg1
, DUMMYANDREF( const Lang::Symbol
) arg2
, const Kernel::PassedDyn
& dyn
) const
159 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( *arg1
> *arg2
) );
162 RefCountPtr
< const Lang::Value
>
163 Ast::GreaterExpr::impl( DUMMYANDREF( const Lang::Float
) arg1
, DUMMYANDREF( const Lang::Float
) arg2
, const Kernel::PassedDyn
& dyn
) const
165 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( arg1
->val_
> arg2
->val_
) );
168 RefCountPtr
< const Lang::Value
>
169 Ast::GreaterExpr::impl( DUMMYANDREF( const Lang::Integer
) arg1
, DUMMYANDREF( const Lang::Integer
) arg2
, const Kernel::PassedDyn
& dyn
) const
171 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( arg1
->val_
> arg2
->val_
) );
174 RefCountPtr
< const Lang::Value
>
175 Ast::GreaterExpr::impl( DUMMYANDREF( const Lang::Length
) arg1
, DUMMYANDREF( const Lang::Length
) arg2
, const Kernel::PassedDyn
& dyn
) const
177 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( arg1
->get( ) > arg2
->get( ) ) );
180 RefCountPtr
< const Lang::Value
>
181 Ast::GreaterExpr::impl( DUMMYANDREF( const Lang::Coords2D
) arg1
, DUMMYANDREF( const Lang::Coords2D
) arg2
, const Kernel::PassedDyn
& dyn
) const
183 Lang::PathPoint2D
* res
= new Lang::PathPoint2D( arg1
);
185 return Kernel::ValueRef( res
);
188 RefCountPtr
< const Lang::Value
>
189 Ast::GreaterExpr::impl( DUMMYANDREF( const Lang::PathPoint2D
) arg1
, DUMMYANDREF( const Lang::Coords2D
) arg2
, const Kernel::PassedDyn
& dyn
) const
191 Lang::PathPoint2D
* res
= new Lang::PathPoint2D( *arg1
);
192 if( res
->front_
.getPtr( ) != 0 )
194 throw Exceptions::OutOfRange( this->loc( ), strrefdup( "Pathpoint already has a front handle" ) );
197 return Kernel::ValueRef( res
);
200 RefCountPtr
< const Lang::Value
>
201 Ast::GreaterExpr::impl( DUMMYANDREF( const Lang::PathSlider2D
) arg1
, DUMMYANDREF( const Lang::Coords2D
) arg2
, const Kernel::PassedDyn
& dyn
) const
203 if( arg1
->getFront( ) != NullPtr
< const Lang::Value
>( ) )
205 throw Exceptions::OutOfRange( this->loc( ), strrefdup( "Slider already has a front handle" ) );
207 return Kernel::ValueRef( new Lang::PathSlider2D_front( *arg1
, arg2
) );
210 RefCountPtr
< const Lang::Value
>
211 Ast::GreaterExpr::impl( DUMMYANDREF( const Lang::Coords2D
) arg1
, DUMMYANDREF( const Lang::PolarHandleBase
) arg2
, const Kernel::PassedDyn
& dyn
) const
213 Lang::PathPoint2D
* res
= new Lang::PathPoint2D( arg1
);
215 return Kernel::ValueRef( res
);
218 RefCountPtr
< const Lang::Value
>
219 Ast::GreaterExpr::impl( DUMMYANDREF( const Lang::PathPoint2D
) arg1
, DUMMYANDREF( const Lang::PolarHandleBase
) arg2
, const Kernel::PassedDyn
& dyn
) const
221 Lang::PathPoint2D
* res
= new Lang::PathPoint2D( *arg1
);
222 if( res
->front_
.getPtr( ) != 0 )
224 throw Exceptions::OutOfRange( this->loc( ), strrefdup( "Pathpoint already has a front handle" ) );
227 return Kernel::ValueRef( res
);
230 RefCountPtr
< const Lang::Value
>
231 Ast::GreaterExpr::impl( DUMMYANDREF( const Lang::PathSlider2D
) arg1
, DUMMYANDREF( const Lang::PolarHandleBase
) arg2
, const Kernel::PassedDyn
& dyn
) const
233 if( arg1
->getFront( ) != NullPtr
< const Lang::Value
>( ) )
235 throw Exceptions::OutOfRange( this->loc( ), strrefdup( "Slider already has a front handle" ) );
237 return Kernel::ValueRef( new Lang::PathSlider2D_front( *arg1
, arg2
) );
240 RefCountPtr
< const Lang::Value
>
241 Ast::GreaterExpr::impl( DUMMYANDREF( const Lang::Coords2D
) arg1
, DUMMYANDREF( const Lang::CornerCoords2D
) arg2
, const Kernel::PassedDyn
& dyn
) const
243 throw Exceptions::MiscellaneousRequirement( strrefdup( "A handle mustn't have a default angle." ) );
246 RefCountPtr
< const Lang::Value
>
247 Ast::GreaterExpr::impl( DUMMYANDREF( const Lang::PathPoint2D
) arg1
, DUMMYANDREF( const Lang::CornerCoords2D
) arg2
, const Kernel::PassedDyn
& dyn
) const
249 throw Exceptions::MiscellaneousRequirement( strrefdup( "A handle mustn't have a default angle." ) );
252 RefCountPtr
< const Lang::Value
>
253 Ast::GreaterExpr::impl( DUMMYANDREF( const Lang::Coords3D
) arg1
, DUMMYANDREF( const Lang::Coords3D
) arg2
, const Kernel::PassedDyn
& dyn
) const
255 Lang::PathPoint3D
* res
= new Lang::PathPoint3D( arg1
);
257 return Kernel::ValueRef( res
);
260 RefCountPtr
< const Lang::Value
>
261 Ast::GreaterExpr::impl( DUMMYANDREF( const Lang::PathPoint3D
) arg1
, DUMMYANDREF( const Lang::Coords3D
) arg2
, const Kernel::PassedDyn
& dyn
) const
263 Lang::PathPoint3D
* res
= new Lang::PathPoint3D( *arg1
);
264 if( res
->front_
.getPtr( ) != 0 )
266 throw Exceptions::OutOfRange( this->loc( ), strrefdup( "Pathpoint already has a front handle" ) );
269 return Kernel::ValueRef( res
);
272 RefCountPtr
< const Lang::Value
>
273 Ast::GreaterExpr::impl( DUMMYANDREF( const Lang::PathSlider3D
) arg1
, DUMMYANDREF( const Lang::Coords3D
) arg2
, const Kernel::PassedDyn
& dyn
) const
275 if( arg1
->getFront( ) != NullPtr
< const Lang::Value
>( ) )
277 throw Exceptions::OutOfRange( this->loc( ), strrefdup( "Slider already has a front handle" ) );
279 return Kernel::ValueRef( new Lang::PathSlider3D_front( *arg1
, arg2
) );
283 RefCountPtr
< const Lang::Value
>
284 Ast::EqualExpr::impl( DUMMYANDREF( const Lang::Symbol
) arg1
, DUMMYANDREF( const Lang::Symbol
) arg2
, const Kernel::PassedDyn
& dyn
) const
286 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( *arg1
== *arg2
) );
289 RefCountPtr
< const Lang::Value
>
290 Ast::EqualExpr::impl( DUMMYANDREF( const Lang::Float
) arg1
, DUMMYANDREF( const Lang::Float
) arg2
, const Kernel::PassedDyn
& dyn
) const
292 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( arg1
->val_
== arg2
->val_
) );
295 RefCountPtr
< const Lang::Value
>
296 Ast::EqualExpr::impl( DUMMYANDREF( const Lang::Integer
) arg1
, DUMMYANDREF( const Lang::Integer
) arg2
, const Kernel::PassedDyn
& dyn
) const
298 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( arg1
->val_
== arg2
->val_
) );
301 RefCountPtr
< const Lang::Value
>
302 Ast::EqualExpr::impl( DUMMYANDREF( const Lang::Length
) arg1
, DUMMYANDREF( const Lang::Length
) arg2
, const Kernel::PassedDyn
& dyn
) const
304 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( arg1
->get( ) == arg2
->get( ) ) );
307 RefCountPtr
< const Lang::Value
>
308 Ast::EqualExpr::impl( DUMMYANDREF( const Lang::Class
) arg1
, DUMMYANDREF( const Lang::Class
) arg2
, const Kernel::PassedDyn
& dyn
) const
310 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( arg1
== arg2
) );
314 RefCountPtr
< const Lang::Value
>
315 Ast::NotEqualExpr::impl( DUMMYANDREF( const Lang::Symbol
) arg1
, DUMMYANDREF( const Lang::Symbol
) arg2
, const Kernel::PassedDyn
& dyn
) const
317 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( *arg1
!= *arg2
) );
320 RefCountPtr
< const Lang::Value
>
321 Ast::NotEqualExpr::impl( DUMMYANDREF( const Lang::Float
) arg1
, DUMMYANDREF( const Lang::Float
) arg2
, const Kernel::PassedDyn
& dyn
) const
323 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( arg1
->val_
!= arg2
->val_
) );
326 RefCountPtr
< const Lang::Value
>
327 Ast::NotEqualExpr::impl( DUMMYANDREF( const Lang::Integer
) arg1
, DUMMYANDREF( const Lang::Integer
) arg2
, const Kernel::PassedDyn
& dyn
) const
329 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( arg1
->val_
!= arg2
->val_
) );
332 RefCountPtr
< const Lang::Value
>
333 Ast::NotEqualExpr::impl( DUMMYANDREF( const Lang::Length
) arg1
, DUMMYANDREF( const Lang::Length
) arg2
, const Kernel::PassedDyn
& dyn
) const
335 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( arg1
->get( ) != arg2
->get( ) ) );
338 RefCountPtr
< const Lang::Value
>
339 Ast::NotEqualExpr::impl( DUMMYANDREF( const Lang::Class
) arg1
, DUMMYANDREF( const Lang::Class
) arg2
, const Kernel::PassedDyn
& dyn
) const
341 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( arg1
!= arg2
) );
345 RefCountPtr
< const Lang::Value
>
346 Ast::LessEqualExpr::impl( DUMMYANDREF( const Lang::Symbol
) arg1
, DUMMYANDREF( const Lang::Symbol
) arg2
, const Kernel::PassedDyn
& dyn
) const
348 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( *arg1
<= *arg2
) );
351 RefCountPtr
< const Lang::Value
>
352 Ast::LessEqualExpr::impl( DUMMYANDREF( const Lang::Float
) arg1
, DUMMYANDREF( const Lang::Float
) arg2
, const Kernel::PassedDyn
& dyn
) const
354 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( arg1
->val_
<= arg2
->val_
) );
357 RefCountPtr
< const Lang::Value
>
358 Ast::LessEqualExpr::impl( DUMMYANDREF( const Lang::Integer
) arg1
, DUMMYANDREF( const Lang::Integer
) arg2
, const Kernel::PassedDyn
& dyn
) const
360 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( arg1
->val_
<= arg2
->val_
) );
363 RefCountPtr
< const Lang::Value
>
364 Ast::LessEqualExpr::impl( DUMMYANDREF( const Lang::Length
) arg1
, DUMMYANDREF( const Lang::Length
) arg2
, const Kernel::PassedDyn
& dyn
) const
366 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( arg1
->get( ) <= arg2
->get( ) ) );
370 RefCountPtr
< const Lang::Value
>
371 Ast::GreaterEqualExpr::impl( DUMMYANDREF( const Lang::Symbol
) arg1
, DUMMYANDREF( const Lang::Symbol
) arg2
, const Kernel::PassedDyn
& dyn
) const
373 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( *arg1
>= *arg2
) );
376 RefCountPtr
< const Lang::Value
>
377 Ast::GreaterEqualExpr::impl( DUMMYANDREF( const Lang::Float
) arg1
, DUMMYANDREF( const Lang::Float
) arg2
, const Kernel::PassedDyn
& dyn
) const
379 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( arg1
->val_
>= arg2
->val_
) );
382 RefCountPtr
< const Lang::Value
>
383 Ast::GreaterEqualExpr::impl( DUMMYANDREF( const Lang::Integer
) arg1
, DUMMYANDREF( const Lang::Integer
) arg2
, const Kernel::PassedDyn
& dyn
) const
385 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( arg1
->val_
>= arg2
->val_
) );
388 RefCountPtr
< const Lang::Value
>
389 Ast::GreaterEqualExpr::impl( DUMMYANDREF( const Lang::Length
) arg1
, DUMMYANDREF( const Lang::Length
) arg2
, const Kernel::PassedDyn
& dyn
) const
391 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( arg1
->get( ) >= arg2
->get( ) ) );
395 RefCountPtr
< const Lang::Value
>
396 Ast::AndExpr::impl( DUMMYANDREF( const Lang::Boolean
) arg1
, DUMMYANDREF( const Lang::Boolean
) arg2
, const Kernel::PassedDyn
& dyn
) const
398 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( arg1
->val_
&& arg2
->val_
) );
402 RefCountPtr
< const Lang::Value
>
403 Ast::OrExpr::impl( DUMMYANDREF( const Lang::Boolean
) arg1
, DUMMYANDREF( const Lang::Boolean
) arg2
, const Kernel::PassedDyn
& dyn
) const
405 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( arg1
->val_
|| arg2
->val_
) );
409 RefCountPtr
< const Lang::Value
>
410 Ast::XorExpr::impl( DUMMYANDREF( const Lang::Boolean
) arg1
, DUMMYANDREF( const Lang::Boolean
) arg2
, const Kernel::PassedDyn
& dyn
) const
412 return RefCountPtr
< const Lang::Value
>( new Lang::Boolean( arg1
->val_
^ arg2
->val_
) );