From fbecd2ab59d461fbd943670338a5def4157e3364 Mon Sep 17 00:00:00 2001 From: Theophile Ranquet Date: Tue, 29 Jan 2013 14:53:35 +0100 Subject: [PATCH] variants: remove the 'built' assertions When using %define parse.assert, the variants come with additional variables that are useful for development purposes. One is a Boolean indicating if the variant is built (to make sure we don't read a non-built variant), and the other is a string describing the stored type. There is no need to have both of these, the string is enough. * data/variant.hh (built): Remove. --- data/variant.hh | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/data/variant.hh b/data/variant.hh index 3b21329..047e641 100644 --- a/data/variant.hh +++ b/data/variant.hh @@ -95,15 +95,13 @@ m4_define([b4_variant_define], /// Empty construction. variant ()]b4_parse_assert_if([ - : built (false) - , tname (YY_NULL)])[ + : tname (YY_NULL)])[ {} /// Construct and fill. template variant (const T& t)]b4_parse_assert_if([ - : built (true) - , tname (typeid (T).name ())])[ + : tname (typeid (T).name ())])[ { YYASSERT (sizeof (T) <= S); new (buffer.raw) T (t); @@ -112,7 +110,7 @@ m4_define([b4_variant_define], /// Destruction, allowed only if empty. ~variant () {]b4_parse_assert_if([ - YYASSERT (!built); + YYASSERT (!tname); ])[} /// Instantiate an empty \a T in here. @@ -120,10 +118,8 @@ m4_define([b4_variant_define], T& build () {]b4_parse_assert_if([ - YYASSERT (!built); YYASSERT (!tname); YYASSERT (sizeof (T) <= S); - built = true; tname = typeid (T).name ();])[ return *new (buffer.raw) T; } @@ -133,10 +129,8 @@ m4_define([b4_variant_define], T& build (const T& t) {]b4_parse_assert_if([ - YYASSERT (!built); YYASSERT (!tname); YYASSERT (sizeof (T) <= S); - built = true; tname = typeid (T).name ();])[ return *new (buffer.raw) T (t); } @@ -146,7 +140,6 @@ m4_define([b4_variant_define], T& as () {]b4_parse_assert_if([ - YYASSERT (built); YYASSERT (tname == typeid (T).name ()); YYASSERT (sizeof (T) <= S);])[ return reinterpret_cast (buffer.raw); @@ -157,7 +150,6 @@ m4_define([b4_variant_define], const T& as () const {]b4_parse_assert_if([ - YYASSERT (built); YYASSERT (tname == typeid (T).name ()); YYASSERT (sizeof (T) <= S);])[ return reinterpret_cast (buffer.raw); @@ -175,8 +167,7 @@ m4_define([b4_variant_define], void swap (self_type& other) {]b4_parse_assert_if([ - YYASSERT (built); - YYASSERT (other.built); + YYASSERT (tname); YYASSERT (tname == other.tname);])[ std::swap (as(), other.as()); } @@ -188,7 +179,7 @@ m4_define([b4_variant_define], void move (self_type& other) {]b4_parse_assert_if([ - YYASSERT (! built);])[ + YYASSERT (!tname);])[ build(); swap(other); other.destroy(); @@ -208,7 +199,6 @@ m4_define([b4_variant_define], destroy () { as ().~T ();]b4_parse_assert_if([ - built = false; tname = YY_NULL;])[ } @@ -226,9 +216,7 @@ m4_define([b4_variant_define], char raw[S]; } buffer;]b4_parse_assert_if([ - /// Whether the content is built. - bool built; - /// If defined, the name of the stored type. + /// Whether the content is built: if defined, the name of the stored type. const char* tname;])[ }; ]]) -- 2.7.4