From 319da4bff6e7eeac3148c9948720a8f72e3a49aa Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Fri, 18 Oct 2013 01:10:03 +0200 Subject: [PATCH] WIP: improve the API --- src/lib/depend.hpp | 41 ++++++++++++----------- tests/library/dependency-factory-test.cpp | 2 +- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/src/lib/depend.hpp b/src/lib/depend.hpp index c628f52f9..ec0566bda 100644 --- a/src/lib/depend.hpp +++ b/src/lib/depend.hpp @@ -60,7 +60,7 @@ namespace lib { template class Depend { - typedef ClassLock ThreadLock; + typedef ClassLock SyncLock; typedef DependencyFactory Factory; static SI* volatile instance; @@ -78,7 +78,7 @@ namespace lib { { if (!instance) { - ThreadLock guard; + SyncLock guard; if (!instance) instance = factory.buildInstance(); @@ -90,7 +90,7 @@ namespace lib { void shutdown() { - ThreadLock guard; + SyncLock guard; factory.deconfigure (instance); instance = NULL; @@ -99,25 +99,26 @@ namespace lib { void injectReplacement (SI* mock) { - if (mock) - { - factory.takeOwnership (mock); // EX_SANE - - ThreadLock guard; - factory.shaddow (instance); - instance = mock; - } - else - { - factory.discardMock (instance); // EX_FREE - - ThreadLock guard; - instance = factory.restore (); // EX_SANE - } + REQUIRE (mock); + factory.takeOwnership (mock); // EX_SANE + + SyncLock guard; + factory.shaddow (instance); // EX_FREE + instance = mock; } - Depend (); - Depend (typename Factory::Constructor ctor); + void + dropReplacement() + { + SyncLock guard; + factory.discardMock (instance); // EX_FREE + instance = factory.restore (); // EX_SANE + } + + + typedef typename Factory::InstanceConstructor Constructor; + + Depend (Constructor ctor = buildSingleton()); private: }; diff --git a/tests/library/dependency-factory-test.cpp b/tests/library/dependency-factory-test.cpp index ca72d4861..be6a292eb 100644 --- a/tests/library/dependency-factory-test.cpp +++ b/tests/library/dependency-factory-test.cpp @@ -213,7 +213,7 @@ namespace test{ CHECK(!isSameObject (replacement, special() )); CHECK(!isSameObject (replacement, custom() )); - genericAccessor.injectReplacement (NULL); + genericAccessor.dropReplacement(); Sub& nextFetch = genericAccessor(); CHECK (isSameObject (original, nextFetch));