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 testClone2.cpp.
Alias: Performs without unnecessary duplicates "parameter -> member data"
- A& -> A& // no duplication (checked)
- A* -> A& // no duplication, exception if null (checked)
- A& -> A* // no duplication (checked)
- A* -> A* // no duplication (checked)
- CountedPtr -> CountedPtr // shared (checked)
- CountedPtr -> CowPtr // shared (not logical, but not preventable). (checked)
Definition at line 475 of file testClone2.cpp.
476{
477 unsigned int nb = 0;
478 unsigned int nbok = 0;
484
485
486
487
488
489
490
491
492 trace.
beginBlock (
"Alias: #DummyTbl with DummyTbl& to DummyTbl& member. no duplication (0/0)" );
494 trace.
info() <<
"D: d1.value() = " << c00.value() << std::endl;
497 trace.
info() <<
"(" << nbok <<
"/" << nb <<
")"
501
502 trace.
beginBlock (
"Alias: #DummyTbl with DummyTbl* to DummyTbl& member. no duplication (0/0)" );
504 trace.
info() <<
"D: d1.value() = " << c10.value() << std::endl;
507 trace.
info() <<
"(" << nbok <<
"/" << nb <<
")"
511
512 trace.
beginBlock (
"Alias: #DummyTbl with DummyTbl& to DummyTbl* member. no duplication (0/0)" );
514 trace.
info() <<
"D: d1.value() = " << c01.value() << std::endl;
517 trace.
info() <<
"(" << nbok <<
"/" << nb <<
")"
521
522 trace.
beginBlock (
"Alias: #DummyTbl with DummyTbl* to DummyTbl* member. no duplication (0/0)" );
524 trace.
info() <<
"D: d1.value() = " << c11.value() << std::endl;
527 trace.
info() <<
"(" << nbok <<
"/" << nb <<
")"
531
532 trace.
beginBlock (
"Alias: #DummyTbl with DummyTbl& to CountedPtrOrPtr<DummyTbl> member. no duplication (0/0)" );
534 trace.
info() <<
"D: d1.value() = " << c06.value() << std::endl;
535 trace.
info() << c06.myDummyTbl << std::endl;
538 trace.
info() <<
"(" << nbok <<
"/" << nb <<
")"
542
543 trace.
beginBlock (
"Alias: #DummyTbl with DummyTbl* to CountedPtrOrPtr<DummyTbl> member. no duplication (0/0)" );
545 trace.
info() <<
"D: d1.value() = " << c16.value() << std::endl;
546 trace.
info() << c16.myDummyTbl << std::endl;
549 trace.
info() <<
"(" << nbok <<
"/" << nb <<
")"
553
554
555
556
557
558
560
561 delete ptr_a2;
562 return nbok == nb;
563}
Aim: Smart pointer based on reference counts.
void beginBlock(const std::string &keyword="")
References DGtal::Trace::beginBlock(), DGtal::Trace::endBlock(), DGtal::Trace::info(), AliasToCountedPtrOrPtrMember::myDummyTbl, DummyTbl::nbCreated, DummyTbl::nbDeleted, DummyTbl::reset(), DGtal::trace, AliasToRefMember::value(), AliasToPtrMember::value(), and AliasToCountedPtrOrPtrMember::value().
Referenced by main().
Clone: Performs without unnecessary duplicates "parameter -> member data"
- const A & -> A // immediate duplication (checked)
- A* -> A // immediate duplication, acquired and deleted. (checked)
- CountedPtr -> A // immediate duplication (checked)
- CowPtr -> A // immediate duplication (checked)
- A&& -> A // move into member (checked)
- const A & -> CowPtr // immediate duplication (checked)
- A* -> CowPtr // acquired (checked)
- CountedPtr -> CowPtr // lazy duplication (checked)
- CowPtr -> CowPtr // lazy duplication (checked)
- A&& -> CowPtr // move into member (checked)
- const A & -> A* // immediate duplication, should be deleted at the end. (checked)
- A* -> A* // acquired, should be deleted at the end. (checked)
- CountedPtr -> A* // immediate duplication, should be deleted at the end. (checked)
- CowPtr -> A* // immediate duplication, should be deleted at the end. (checked)
- A&& -> A* // move into member, should be deleted at the end. (checked)
Definition at line 691 of file testClone2.cpp.
692{
693 unsigned int nb = 0;
694 unsigned int nbok = 0;
700
701
702 trace.
beginBlock (
"Clone: #DummyTbl with (const DummyTbl &) to DummyTbl member. Duplication (+1/0)" );
704 trace.
info() <<
"D: d1.value() = " << c00.value() << std::endl;
707 trace.
info() <<
"(" << nbok <<
"/" << nb <<
")"
711
712 trace.
beginBlock (
"Clone: #DummyTbl with (CountedPtr<DummyTbl>) to DummyTbl member. Duplication (+1/0)" );
714 trace.
info() <<
"D: d1.value() = " << c30.value() << std::endl;
717 trace.
info() <<
"(" << nbok <<
"/" << nb <<
")"
721
722 trace.
beginBlock (
"Clone: #DummyTbl with (const DummyTbl &) to CountedPtr<DummyTbl> member. Duplication (+1/0)" );
724 trace.
info() <<
"D: d1.value() = " << c03.value() << std::endl;
727 trace.
info() <<
"(" << nbok <<
"/" << nb <<
")"
731
732 trace.
beginBlock (
"Clone: #DummyTbl with (const DummyTbl &) to CowPtr<DummyTbl> member. Duplication (+1/0)" );
734 trace.
info() <<
"D: d1.value() = " << c02.value() << std::endl;
737 trace.
info() <<
"(" << nbok <<
"/" << nb <<
")"
741
742 trace.
beginBlock (
"Clone: #DummyTbl with (CowPtr<DummyTbl> &) to CowPtr<DummyTbl> member. Lazy duplication (0/0)" );
744 trace.
info() <<
"D: d1.value() = " << c22.value() << std::endl;
747 trace.
info() <<
"(" << nbok <<
"/" << nb <<
")"
750 c22.setValue( 17 );
751 trace.
info() <<
"D: d1.setValue( 17 ) -> now duplicating " << std::endl;
752 trace.
info() <<
"D: d1.value() = " << c22.value() << std::endl;
755 trace.
info() <<
"(" << nbok <<
"/" << nb <<
")"
759
760 trace.
beginBlock (
"Clone: #DummyTbl with (CountedPtr<DummyTbl> &) to CowPtr<DummyTbl> member. Lazy duplication (0/0)" );
762 trace.
info() <<
"D: d1.value() = " << c32.value() << std::endl;
765 trace.
info() <<
"(" << nbok <<
"/" << nb <<
")"
768 c32.setValue( 21 );
769 trace.
info() <<
"D: d1.setValue( 21 ) -> now duplicating " << std::endl;
770 trace.
info() <<
"D: d1.value() = " << c32.value() << std::endl;
773 trace.
info() <<
"(" << nbok <<
"/" << nb <<
")"
777
778 trace.
beginBlock (
"Clone: #DummyTbl with (DummyTbl*) to DummyTbl member. Acquisition, duplication, delete (+2/+1)" );
780 trace.
info() <<
"D: d1.value() = " << c10.value() << std::endl;
783 trace.
info() <<
"(" << nbok <<
"/" << nb <<
")"
787
788 trace.
beginBlock (
"Clone: #DummyTbl with (DummyTbl*) to CowPtr<DummyTbl> member. Acquisition, no duplication (+1/0)" );
790 trace.
info() <<
"D: d1.value() = " << c12.value() << std::endl;
793 trace.
info() <<
"(" << nbok <<
"/" << nb <<
")"
797
798 trace.
beginBlock (
"Clone: #DummyTbl with (const DummyTbl&) to DummyTbl* member. Duplication (+1/0)" );
800 trace.
info() <<
"D: d1.value() = " << c01.value() << std::endl;
803 trace.
info() <<
"(" << nbok <<
"/" << nb <<
")"
807
808 trace.
beginBlock (
"Clone: #DummyTbl with (DummyTbl*) to DummyTbl* member. Acquisition (+1/0)" );
810 trace.
info() <<
"D: d1.value() = " << c11.value() << std::endl;
813 trace.
info() <<
"(" << nbok <<
"/" << nb <<
")"
817
818 trace.
beginBlock (
"Clone: #DummyTbl with (CowPtr<DummyTbl>) to DummyTbl* member. Duplication (+1/0)" );
820 trace.
info() <<
"D: d1.value() = " << c21.value() << std::endl;
823 trace.
info() <<
"(" << nbok <<
"/" << nb <<
")"
827
828 trace.
beginBlock (
"Clone: #DummyTbl with (CountedPtr<DummyTbl>) to DummyTbl* member. Duplication (+1/0)" );
830 trace.
info() <<
"D: d1.value() = " << c31.value() << std::endl;
833 trace.
info() <<
"(" << nbok <<
"/" << nb <<
")"
837
838 trace.
beginBlock (
"Clone: #DummyTbl with (DummyTbl &&) to DummyTbl member. Duplication by move (+2/+1/+1)" );
840 trace.
info() <<
"D: d1.value() = " << c40.value() << std::endl;
844 trace.
info() <<
"(" << nbok <<
"/" << nb <<
")"
848 << std::endl;
850
851 trace.
beginBlock (
"Clone: #DummyTbl with (DummyTbl &&) to CowPtr<DummyTbl> member. Duplication by move (+2/+1/+1)" );
853 trace.
info() <<
"D: d1.value() = " << c42.value() << std::endl;
857 trace.
info() <<
"(" << nbok <<
"/" << nb <<
")"
861 << std::endl;
863
864 trace.
beginBlock (
"Clone: #DummyTbl with (DummyTbl &&) to DummyTbl* member. Duplication by move (+2/+1/+1)" );
866 trace.
info() <<
"D: d1.value() = " << c41.value() << std::endl;
870 trace.
info() <<
"(" << nbok <<
"/" << nb <<
")"
874 << std::endl;
876
878
879 return nbok == nb;
880}
References DGtal::Trace::beginBlock(), DGtal::Trace::endBlock(), DGtal::Trace::info(), DummyTbl::nbCreated, DummyTbl::nbDeleted, DummyTbl::nbMoved, DummyTbl::reset(), CloneToCowMember::setValue(), DGtal::trace, CloneToValueMember::value(), CloneToCountedMember::value(), CloneToCowMember::value(), and CloneToPtrMember::value().
Referenced by main().