diff --git a/test/world.cpp b/test/world.cpp index 72295cf..2e7ca51 100644 --- a/test/world.cpp +++ b/test/world.cpp @@ -17,14 +17,17 @@ #include #include -struct person; BOOST_TYPEOF_REGISTER_TYPE(person) struct person {}; +BOOST_TYPEOF_REGISTER_TYPE(person) -struct world; BOOST_TYPEOF_REGISTER_TYPE(world) struct world { void add_person(person const& a_person); + size_t population(void) const { return persons_.size(); } + +private: std::vector persons_; }; +BOOST_TYPEOF_REGISTER_TYPE(world) //[world void world::add_person(person const& a_person) { @@ -46,7 +49,7 @@ BOOST_AUTO_TEST_CASE( test_world ) { world w; person p; w.add_person(p); - BOOST_CHECK( w.persons_.size() == 1 ); + BOOST_CHECK( w.population() == 1 ); } #else diff --git a/test/world_checkpoint.cpp b/test/world_checkpoint.cpp index 3549b23..d12cf4f 100644 --- a/test/world_checkpoint.cpp +++ b/test/world_checkpoint.cpp @@ -20,30 +20,23 @@ #include #include -class person; BOOST_TYPEOF_REGISTER_TYPE(person) -class person { - friend class world; -public: +struct person { typedef unsigned int id_t; typedef unsigned int evolution_t; + + id_t id; + evolution_t evolution; - person(void) : id_(0), evolution_(0) {} + person(void) : id(0), evolution(0) {} friend std::ostream& operator<<(std::ostream& o, person const& p) { - return o << "person(" << p.id_ << ", " << p.evolution_ << ")"; + return o << "person(" << p.id << ", " << p.evolution << ")"; } -private: - id_t id_; - evolution_t evolution_; }; +BOOST_TYPEOF_REGISTER_TYPE(person) -class world; BOOST_TYPEOF_REGISTER_TYPE(world) -class world { -public: - typedef unsigned int id_t; - +struct world { world(void) : next_id_(1) {} - void add_person(person const& a_person); friend std::ostream& operator<<(std::ostream& o, world const& w) { @@ -53,10 +46,12 @@ public: } return o << "})"; } + private: - id_t next_id_; + person::id_t next_id_; std::vector persons_; }; +BOOST_TYPEOF_REGISTER_TYPE(world) //[world_checkpoint void world::add_person(person const& a_person) { @@ -64,28 +59,28 @@ void world::add_person(person const& a_person) { // This block must be no-throw. person& p = persons_.back(); - person::evolution_t checkpoint = p.evolution_; + person::evolution_t checkpoint = p.evolution; BOOST_SCOPE_EXIT(checkpoint, &p, &persons_) { - if(checkpoint == p.evolution_) persons_.pop_back(); + if(checkpoint == p.evolution) persons_.pop_back(); } BOOST_SCOPE_EXIT_END // ... - checkpoint = ++p.evolution_; + checkpoint = ++p.evolution; // Assign new identifier to the person. - world::id_t const prev_id = p.id_; - p.id_ = next_id_++; + person::id_t const prev_id = p.id; + p.id = next_id_++; BOOST_SCOPE_EXIT(checkpoint, &p, &next_id_, prev_id) { - if(checkpoint == p.evolution_) { - next_id_ = p.id_; - p.id_ = prev_id; + if(checkpoint == p.evolution) { + next_id_ = p.id; + p.id = prev_id; } } BOOST_SCOPE_EXIT_END // ... - checkpoint = ++p.evolution_; + checkpoint = ++p.evolution; } //] diff --git a/test/world_checkpoint_all.cpp b/test/world_checkpoint_all.cpp index 61f528b..fc1ca8e 100644 --- a/test/world_checkpoint_all.cpp +++ b/test/world_checkpoint_all.cpp @@ -20,30 +20,23 @@ #include #include -class person; BOOST_TYPEOF_REGISTER_TYPE(person) -class person { - friend class world; -public: +struct person { typedef unsigned int id_t; typedef unsigned int evolution_t; + + id_t id; + evolution_t evolution; - person(void) : id_(0), evolution_(0) {} + person(void) : id(0), evolution(0) {} friend std::ostream& operator<<(std::ostream& o, person const& p) { - return o << "person(" << p.id_ << ", " << p.evolution_ << ")"; + return o << "person(" << p.id << ", " << p.evolution << ")"; } -private: - id_t id_; - evolution_t evolution_; }; +BOOST_TYPEOF_REGISTER_TYPE(person) -class world; BOOST_TYPEOF_REGISTER_TYPE(world) -class world { -public: - typedef unsigned int id_t; - +struct world { world(void) : next_id_(1) {} - void add_person(person const& a_person); friend std::ostream& operator<<(std::ostream& o, world const& w) { @@ -53,10 +46,12 @@ public: } return o << "})"; } + private: - id_t next_id_; + person::id_t next_id_; std::vector persons_; }; +BOOST_TYPEOF_REGISTER_TYPE(world) //[world_checkpoint_all void world::add_person(person const& a_person) { @@ -64,28 +59,28 @@ void world::add_person(person const& a_person) { // This block must be no-throw. person& p = persons_.back(); - person::evolution_t checkpoint = p.evolution_; + person::evolution_t checkpoint = p.evolution; BOOST_SCOPE_EXIT_ALL(&, checkpoint, this_) { // Capture all by ref (C++11). - if(checkpoint == p.evolution_) this_->persons_.pop_back(); + if(checkpoint == p.evolution) this_->persons_.pop_back(); } BOOST_SCOPE_EXIT_END // ... - checkpoint = ++p.evolution_; + checkpoint = ++p.evolution; // Assign new identifier to the person. - world::id_t const prev_id = p.id_; - p.id_ = next_id_++; + person::id_t const prev_id = p.id; + p.id = next_id_++; BOOST_SCOPE_EXIT_ALL(=, &p, this) { // Capture all by value, `this` (C++11). - if(checkpoint == p.evolution_) { - this->next_id_ = p.id_; - p.id_ = prev_id; + if(checkpoint == p.evolution) { + this->next_id_ = p.id; + p.id = prev_id; } }; // Use `;` instead of `SCOPE_EXIT_END` (C++11). // ... - checkpoint = ++p.evolution_; + checkpoint = ++p.evolution; } //] diff --git a/test/world_checkpoint_all_seq.cpp b/test/world_checkpoint_all_seq.cpp index b8be8ad..355e818 100644 --- a/test/world_checkpoint_all_seq.cpp +++ b/test/world_checkpoint_all_seq.cpp @@ -20,30 +20,23 @@ #include #include -class person; BOOST_TYPEOF_REGISTER_TYPE(person) -class person { - friend class world; -public: +struct person { typedef unsigned int id_t; typedef unsigned int evolution_t; - person(void) : id_(0), evolution_(0) {} + id_t id; + evolution_t evolution; + + person(void) : id(0), evolution(0) {} friend std::ostream& operator<<(std::ostream& o, person const& p) { - return o << "person(" << p.id_ << ", " << p.evolution_ << ")"; + return o << "person(" << p.id << ", " << p.evolution << ")"; } -private: - id_t id_; - evolution_t evolution_; }; +BOOST_TYPEOF_REGISTER_TYPE(person) -class world; BOOST_TYPEOF_REGISTER_TYPE(world) -class world { -public: - typedef unsigned int id_t; - +struct world { world(void) : next_id_(1) {} - void add_person(person const& a_person); friend std::ostream& operator<<(std::ostream& o, world const& w) { @@ -53,10 +46,12 @@ public: } return o << "})"; } + private: - id_t next_id_; + person::id_t next_id_; std::vector persons_; }; +BOOST_TYPEOF_REGISTER_TYPE(world) //[world_checkpoint_all_seq void world::add_person(person const& a_person) { @@ -64,28 +59,28 @@ void world::add_person(person const& a_person) { // This block must be no-throw. person& p = persons_.back(); - person::evolution_t checkpoint = p.evolution_; + person::evolution_t checkpoint = p.evolution; BOOST_SCOPE_EXIT_ALL( (&) (checkpoint) (this_) ) { - if(checkpoint == p.evolution_) this_->persons_.pop_back(); + if(checkpoint == p.evolution) this_->persons_.pop_back(); } BOOST_SCOPE_EXIT_END // ... - checkpoint = ++p.evolution_; + checkpoint = ++p.evolution; // Assign new identifier to the person. - world::id_t const prev_id = p.id_; - p.id_ = next_id_++; + person::id_t const prev_id = p.id; + p.id = next_id_++; BOOST_SCOPE_EXIT_ALL( (=) (&p) (this) ) { - if(checkpoint == p.evolution_) { - this->next_id_ = p.id_; - p.id_ = prev_id; + if(checkpoint == p.evolution) { + this->next_id_ = p.id; + p.id = prev_id; } }; // ... - checkpoint = ++p.evolution_; + checkpoint = ++p.evolution; } //] diff --git a/test/world_checkpoint_seq.cpp b/test/world_checkpoint_seq.cpp index aef0ef9..6448233 100644 --- a/test/world_checkpoint_seq.cpp +++ b/test/world_checkpoint_seq.cpp @@ -17,28 +17,22 @@ #include #include -class person; BOOST_TYPEOF_REGISTER_TYPE(person) -class person { - friend class world; -public: +struct person { typedef unsigned int id_t; typedef unsigned int evolution_t; - person(void) : id_(0), evolution_(0) {} + id_t id; + evolution_t evolution; + + person(void) : id(0), evolution(0) {} friend std::ostream& operator<<(std::ostream& o, person const& p) { - return o << "person(" << p.id_ << ", " << p.evolution_ << ")"; + return o << "person(" << p.id << ", " << p.evolution << ")"; } -private: - id_t id_; - evolution_t evolution_; }; +BOOST_TYPEOF_REGISTER_TYPE(person) -class world; BOOST_TYPEOF_REGISTER_TYPE(world) -class world { -public: - typedef unsigned int id_t; - +struct world { world(void) : next_id_(1) {} void add_person(person const& a_person); @@ -50,10 +44,12 @@ public: } return o << "})"; } + private: - id_t next_id_; + person::id_t next_id_; std::vector persons_; }; +BOOST_TYPEOF_REGISTER_TYPE(world) //[world_checkpoint_seq void world::add_person(person const& a_person) { @@ -61,28 +57,28 @@ void world::add_person(person const& a_person) { // This block must be no-throw. person& p = persons_.back(); - person::evolution_t checkpoint = p.evolution_; + person::evolution_t checkpoint = p.evolution; BOOST_SCOPE_EXIT( (checkpoint) (&p) (&persons_) ) { // Sequence, not commas. - if(checkpoint == p.evolution_) persons_.pop_back(); + if(checkpoint == p.evolution) persons_.pop_back(); } BOOST_SCOPE_EXIT_END // ... - checkpoint = ++p.evolution_; + checkpoint = ++p.evolution; // Assign new identifier to the person. - world::id_t const prev_id = p.id_; - p.id_ = next_id_++; + person::id_t const prev_id = p.id; + p.id = next_id_++; BOOST_SCOPE_EXIT( (checkpoint) (&p) (&next_id_) (prev_id) ) { - if(checkpoint == p.evolution_) { - next_id_ = p.id_; - p.id_ = prev_id; + if(checkpoint == p.evolution) { + next_id_ = p.id; + p.id = prev_id; } } BOOST_SCOPE_EXIT_END // ... - checkpoint = ++p.evolution_; + checkpoint = ++p.evolution; } //] diff --git a/test/world_lambda.cpp b/test/world_lambda.cpp index 90e716a..384f2d3 100644 --- a/test/world_lambda.cpp +++ b/test/world_lambda.cpp @@ -34,7 +34,7 @@ void world::add_person(person const& a_person) { bool commit = false; persons_.push_back(a_person); - scope_exit on_exit1([&commit, &persons_]() { // Use C++11 lambda. + scope_exit on_exit1([&commit, &persons_](void) { // Use C++11 lambda. if(!commit) persons_.pop_back(); }); diff --git a/test/world_seq.cpp b/test/world_seq.cpp index 26df773..a6b3a5c 100644 --- a/test/world_seq.cpp +++ b/test/world_seq.cpp @@ -14,14 +14,17 @@ #include #include -struct person; BOOST_TYPEOF_REGISTER_TYPE(person) struct person {}; +BOOST_TYPEOF_REGISTER_TYPE(person) -struct world; BOOST_TYPEOF_REGISTER_TYPE(world) struct world { void add_person(person const& a_person); + size_t population(void) const { return persons_.size(); } + +private: std::vector persons_; }; +BOOST_TYPEOF_REGISTER_TYPE(world) //[world_seq void world::add_person(person const& a_person) { @@ -42,6 +45,6 @@ BOOST_AUTO_TEST_CASE( test_world_seq ) { world w; person p; w.add_person(p); - BOOST_CHECK( w.persons_.size() == 1 ); + BOOST_CHECK( w.population() == 1 ); } diff --git a/test/world_this.cpp b/test/world_this.cpp index c608641..bf6549f 100644 --- a/test/world_this.cpp +++ b/test/world_this.cpp @@ -18,14 +18,17 @@ #include #include -struct person; BOOST_TYPEOF_REGISTER_TYPE(person) struct person {}; +BOOST_TYPEOF_REGISTER_TYPE(person) -struct world; BOOST_TYPEOF_REGISTER_TYPE(world) struct world { void add_person(person const& a_person); + size_t population(void) const { return persons_.size(); } + +private: std::vector persons_; }; +BOOST_TYPEOF_REGISTER_TYPE(world) void world::add_person(person const& a_person) { bool commit = false; @@ -54,7 +57,7 @@ BOOST_AUTO_TEST_CASE( test_world_this ) { world w; person p; w.add_person(p); - BOOST_CHECK( w.persons_.size() == 1 ); + BOOST_CHECK( w.population() == 1 ); } #else diff --git a/test/world_this_seq.cpp b/test/world_this_seq.cpp index 6b976ae..de5692f 100644 --- a/test/world_this_seq.cpp +++ b/test/world_this_seq.cpp @@ -15,14 +15,17 @@ #include #include -struct person; BOOST_TYPEOF_REGISTER_TYPE(person) struct person {}; +BOOST_TYPEOF_REGISTER_TYPE(person) -struct world; BOOST_TYPEOF_REGISTER_TYPE(world) struct world { void add_person(person const& a_person); + size_t population(void) const { return persons_.size(); } + +private: std::vector persons_; }; +BOOST_TYPEOF_REGISTER_TYPE(world) void world::add_person(person const& a_person) { bool commit = false; @@ -51,6 +54,6 @@ BOOST_AUTO_TEST_CASE( test_world_this_seq ) { world w; person p; w.add_person(p); - BOOST_CHECK( w.persons_.size() == 1 ); + BOOST_CHECK( w.population() == 1 ); } diff --git a/test/world_tpl.cpp b/test/world_tpl.cpp index 1099531..6a1dc6f 100644 --- a/test/world_tpl.cpp +++ b/test/world_tpl.cpp @@ -17,15 +17,18 @@ #include #include -struct person; BOOST_TYPEOF_REGISTER_TYPE(peron) struct person {}; +BOOST_TYPEOF_REGISTER_TYPE(peron) -template struct world; BOOST_TYPEOF_REGISTER_TEMPLATE(world, 1) template struct world { void add_person(Person const& a_person); + size_t population(void) const { return persons_.size(); } + +private: std::vector persons_; }; +BOOST_TYPEOF_REGISTER_TEMPLATE(world, 1) //[world_tpl template @@ -47,7 +50,7 @@ BOOST_AUTO_TEST_CASE( test_world_tpl ) { world w; person p; w.add_person(p); - BOOST_CHECK( w.persons_.size() == 1 ); + BOOST_CHECK( w.population() == 1 ); } #else diff --git a/test/world_tpl_seq.cpp b/test/world_tpl_seq.cpp index f734e8d..9863779 100644 --- a/test/world_tpl_seq.cpp +++ b/test/world_tpl_seq.cpp @@ -14,15 +14,18 @@ #include #include -struct person; BOOST_TYPEOF_REGISTER_TYPE(person) struct person {}; +BOOST_TYPEOF_REGISTER_TYPE(person) -template struct world; BOOST_TYPEOF_REGISTER_TEMPLATE(world, 1) template struct world { void add_person(Person const& a_person); + size_t population(void) const { return persons_.size(); } + +private: std::vector persons_; }; +BOOST_TYPEOF_REGISTER_TEMPLATE(world, 1) //[world_tpl_seq template @@ -44,6 +47,6 @@ BOOST_AUTO_TEST_CASE( test_world_tpl_seq ) { world w; person p; w.add_person(p); - BOOST_CHECK( w.persons_.size() == 1 ); + BOOST_CHECK( w.population() == 1 ); } diff --git a/test/world_void.cpp b/test/world_void.cpp index 0806ff1..ff4a7d9 100644 --- a/test/world_void.cpp +++ b/test/world_void.cpp @@ -14,8 +14,8 @@ #include #include -struct person; BOOST_TYPEOF_REGISTER_TYPE(person) struct person {}; +BOOST_TYPEOF_REGISTER_TYPE(person) struct world_t; BOOST_TYPEOF_REGISTER_TYPE(world_t) //[world_void