DGtal 1.4.0
Loading...
Searching...
No Matches
testCloneAndAliases.cpp File Reference
#include <cstdio>
#include <cmath>
#include <iostream>
#include "DGtal/base/Common.h"
#include "DGtal/base/Clone.h"
#include "DGtal/base/Alias.h"
#include "DGtal/base/ConstAlias.h"
#include "DGtal/helpers/StdDefs.h"
Include dependency graph for testCloneAndAliases.cpp:

Go to the source code of this file.

Typedefs

typedef MyPoint Point
 

Functions

template<typename Triangle >
double computeTriangles (int size)
 
int main ()
 

Detailed Description

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

Author
Jacques-Olivier Lachaud (jacqu.nosp@m.es-o.nosp@m.livie.nosp@m.r.la.nosp@m.chaud.nosp@m.@uni.nosp@m.v-sav.nosp@m.oie..nosp@m.fr ) Laboratory of Mathematics (CNRS, UMR 5807), University of Savoie, France
Date
2012/07/02

This file is part of the DGtal library

Definition in file testCloneAndAliases.cpp.

Typedef Documentation

◆ Point

typedef MyPoint Point

Definition at line 185 of file testCloneAndAliases.cpp.

Function Documentation

◆ computeTriangles()

template<typename Triangle >
double computeTriangles ( int size)

Definition at line 219 of file testCloneAndAliases.cpp.

220{
221 double total = 0.0;
222 Point A( 0, 0 );
223 for ( int yb = 0; yb < size; ++yb )
224 for ( int xb = 0; xb < size; ++xb )
225 {
226 Point B( xb, yb );
227 for ( int yc = 0; yc < size; ++yc )
228 for ( int xc = 0; xc < size; ++xc )
229 {
230 Point C( xc, yc );
231 Triangle T( A, B, C );
232 total += T.perimeter();
233 }
234 }
235 return total;
236}
Represents an unoriented triangle as three vertices.
MyPointD Point

Referenced by main().

◆ main()

int main ( void )

Definition at line 272 of file testCloneAndAliases.cpp.

273{
274 unsigned int nb = 0;
275 unsigned int nbok = 0;
276 trace.beginBlock ( "Number of A1 instances with standard by-value parameter passing." );
277 A1 a1( 10 ); // +1/ 0
278 DByValue d1( a1 ); // +2/+1
279 trace.info() << "D: d1.value() = " << d1.value() << std::endl;
280 ++nb; nbok += A1::nbCreated==3 ? 1 : 0;
281 ++nb; nbok += A1::nbDeleted==1 ? 1 : 0;
282 trace.info() << "(" << nbok << "/" << nb << ")"
283 << " nbCreated=" << A1::nbCreated
284 << " nbDeleted=" << A1::nbDeleted << std::endl;
285 trace.endBlock();
286 trace.beginBlock ( "Number of A1 instances with explicit by-value parameter passing (Clone)." );
287 DByClone dd1( a1 ); // +1/0
288 ++nb; nbok += A1::nbCreated==4 ? 1 : 0;
289 ++nb; nbok += A1::nbDeleted==1 ? 1 : 0;
290 trace.info() << "(" << nbok << "/" << nb << ")"
291 << " nbCreated=" << A1::nbCreated
292 << " nbDeleted=" << A1::nbDeleted << std::endl;
293 trace.endBlock();
294 trace.beginBlock ( "Number of A1 instances with explicit by-reference parameter passing (Alias)." );
295 EByAlias e1( a1 ); // +0/0
296 ++nb; nbok += A1::nbCreated==4 ? 1 : 0;
297 ++nb; nbok += A1::nbDeleted==1 ? 1 : 0;
298 trace.info() << "(" << nbok << "/" << nb << ")"
299 << " nbCreated=" << A1::nbCreated
300 << " nbDeleted=" << A1::nbDeleted << std::endl;
301 trace.endBlock();
302 trace.beginBlock ( "Number of A1 instances with explicit by-const reference parameter passing (Alias)." );
303 EByConstAlias ee1( a1 ); // +0/0
304 ++nb; nbok += A1::nbCreated==4 ? 1 : 0;
305 ++nb; nbok += A1::nbDeleted==1 ? 1 : 0;
306 trace.info() << "(" << nbok << "/" << nb << ")"
307 << " nbCreated=" << A1::nbCreated
308 << " nbDeleted=" << A1::nbDeleted << std::endl;
309 trace.endBlock();
310 trace.beginBlock ( "Number of A1 instances with explicit by-value parameter passing into heap (Clone)." );
311 FByCloneHeap fe1( a1 ); // +1/0
312 ++nb; nbok += A1::nbCreated==5 ? 1 : 0;
313 ++nb; nbok += A1::nbDeleted==1 ? 1 : 0;
314 trace.info() << "(" << nbok << "/" << nb << ")"
315 << " nbCreated=" << A1::nbCreated
316 << " nbDeleted=" << A1::nbDeleted << std::endl;
317 trace.endBlock();
318 trace.beginBlock ( "Number of A1 instances with explicit by-value parameter passing into CowPtr (Clone)." );
319 FByCloneCowPtr fe3( a1 ); // +1/0
320 ++nb; nbok += A1::nbCreated==6 ? 1 : 0;
321 ++nb; nbok += A1::nbDeleted==1 ? 1 : 0;
322 trace.info() << "(" << nbok << "/" << nb << ")"
323 << " nbCreated=" << A1::nbCreated
324 << " nbDeleted=" << A1::nbDeleted << std::endl;
325 trace.endBlock();
326
327 int size = 20;
328 trace.beginBlock ( "Total perimeter of triangles with by-value parameter passing." );
329 double t1 = computeTriangles<TriangleByValue>( size );
330 trace.info() << "Perimeter is " << t1 << std::endl;
331 ++nb; nbok += Point::nbCreated == Point::nbDeleted ? 1 : 0;
332 trace.info() << "(" << nbok << "/" << nb << ")"
333 << " Point nbCreated=" << Point::nbCreated
334 << " nbDeleted=" << Point::nbDeleted << std::endl;
335 int nbC = Point::nbCreated;
336 Point::reset();
337 trace.endBlock();
338 trace.beginBlock ( "Total perimeter of triangles with by-const reference parameter passing." );
340 trace.info() << "Perimeter is " << t2 << std::endl;
341 ++nb; nbok += Point::nbCreated == Point::nbDeleted ? 1 : 0;
342 ++nb; nbok += Point::nbCreated < nbC ? 1 : 0;
343 trace.info() << "(" << nbok << "/" << nb << ")"
344 << " Point nbCreated=" << Point::nbCreated
345 << " nbDeleted=" << Point::nbDeleted << std::endl;
346 Point::reset();
347 trace.endBlock();
348 trace.beginBlock ( "Total perimeter of triangles with by Clone parameter passing." );
349 double t3 = computeTriangles<TriangleByClone>( size );
350 trace.info() << "Perimeter is " << t3 << std::endl;
351 ++nb; nbok += Point::nbCreated == Point::nbDeleted ? 1 : 0;
352 ++nb; nbok += Point::nbCreated < nbC ? 1 : 0;
353 trace.info() << "(" << nbok << "/" << nb << ")"
354 << " Point nbCreated=" << Point::nbCreated
355 << " nbDeleted=" << Point::nbDeleted << std::endl;
356 Point::reset();
357 trace.endBlock();
358
359 // These two lines should not compile.
360 // Clone<A1> clone1( a1 );
361 // Clone<A1> clone2( clone2 );
362
363 return ( nb == nbok ) ? 0 : 1;
364}
void beginBlock(const std::string &keyword="")
std::ostream & info()
double endBlock()
Trace trace
Definition Common.h:153
double computeTriangles(int size)

References DGtal::Trace::beginBlock(), computeTriangles(), DGtal::Trace::endBlock(), DGtal::Trace::info(), and DGtal::trace.