From dd25960e27d2f127e05d9f992eb577bc20e395ab Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 10 Feb 2022 11:52:34 +0200 Subject: Make few global types separately constructible/initializable --- libbuild2/build/script/parser.test.cxx | 2 +- libbuild2/context.hxx | 14 ++++++++++++-- libbuild2/file-cache.hxx | 7 ++++++- libbuild2/file-cache.ixx | 8 +++++++- libbuild2/function.test.cxx | 2 +- libbuild2/test/script/parser.test.cxx | 2 +- tests/libbuild2/driver.cxx | 2 +- 7 files changed, 29 insertions(+), 8 deletions(-) diff --git a/libbuild2/build/script/parser.test.cxx b/libbuild2/build/script/parser.test.cxx index 4089efa..63d41ff 100644 --- a/libbuild2/build/script/parser.test.cxx +++ b/libbuild2/build/script/parser.test.cxx @@ -182,7 +182,7 @@ namespace build2 // scheduler sched (1); global_mutexes mutexes (1); - file_cache fcache; + file_cache fcache (true); context ctx (sched, mutexes, fcache); try diff --git a/libbuild2/context.hxx b/libbuild2/context.hxx index c4d85c9..9df7a88 100644 --- a/libbuild2/context.hxx +++ b/libbuild2/context.hxx @@ -94,8 +94,18 @@ namespace build2 explicit global_mutexes (size_t vc) - : variable_cache_size (vc), - variable_cache (new shared_mutex[variable_cache_size]) {} + { + init (vc); + } + + global_mutexes () = default; // Create uninitialized instance. + + void + init (size_t vc) + { + variable_cache_size = vc; + variable_cache.reset (new shared_mutex[vc]); + } }; // A build context encapsulates the state of a build. It is possible to have diff --git a/libbuild2/file-cache.hxx b/libbuild2/file-cache.hxx index d6904ed..d210685 100644 --- a/libbuild2/file-cache.hxx +++ b/libbuild2/file-cache.hxx @@ -92,7 +92,12 @@ namespace build2 // to the noop implementation. // explicit - file_cache (bool compress = true); + file_cache (bool compress); + + file_cache () = default; // Create uninitialized instance. + + void + init (bool compress); class entry; diff --git a/libbuild2/file-cache.ixx b/libbuild2/file-cache.ixx index 8385c90..b4773e7 100644 --- a/libbuild2/file-cache.ixx +++ b/libbuild2/file-cache.ixx @@ -173,9 +173,15 @@ namespace build2 : string (); } + inline void file_cache:: + init (bool compress) + { + compress_ = compress; + } + inline file_cache:: file_cache (bool compress) - : compress_ (compress) { + init (compress); } } diff --git a/libbuild2/function.test.cxx b/libbuild2/function.test.cxx index b09e4f7..0b3c922 100644 --- a/libbuild2/function.test.cxx +++ b/libbuild2/function.test.cxx @@ -50,7 +50,7 @@ namespace build2 // scheduler sched (1); global_mutexes mutexes (1); - file_cache fcache; + file_cache fcache (true); context ctx (sched, mutexes, fcache); auto& functions (ctx.functions); diff --git a/libbuild2/test/script/parser.test.cxx b/libbuild2/test/script/parser.test.cxx index 47d56ce..eb4a59b 100644 --- a/libbuild2/test/script/parser.test.cxx +++ b/libbuild2/test/script/parser.test.cxx @@ -168,7 +168,7 @@ namespace build2 // scheduler sched (1); global_mutexes mutexes (1); - file_cache fcache; + file_cache fcache (true); context ctx (sched, mutexes, fcache); bool scope (false); diff --git a/tests/libbuild2/driver.cxx b/tests/libbuild2/driver.cxx index 9a8db9e..7cb194d 100644 --- a/tests/libbuild2/driver.cxx +++ b/tests/libbuild2/driver.cxx @@ -41,7 +41,7 @@ main (int, char* argv[]) // scheduler sched (1); global_mutexes mutexes (1); - file_cache fcache; + file_cache fcache (true); context ctx (sched, mutexes, fcache); return 0; -- cgit v1.1