From d38b28da5b105a5391782bee75fea36b8f12340e Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Wed, 2 Dec 2015 01:31:37 +0100 Subject: [PATCH] implement initial EventLog entry --- src/lib/idi/genfunc.cpp | 9 ++++++++- src/lib/idi/genfunc.hpp | 17 ++++++++++++++-- src/lib/test/event-log.hpp | 23 +++++++++++----------- tests/library/test/test-event-log-test.cpp | 5 +++-- 4 files changed, 37 insertions(+), 17 deletions(-) diff --git a/src/lib/idi/genfunc.cpp b/src/lib/idi/genfunc.cpp index 36811bf8e..46aa49b5f 100644 --- a/src/lib/idi/genfunc.cpp +++ b/src/lib/idi/genfunc.cpp @@ -64,12 +64,19 @@ namespace idi { string - instance_formatter (string const& prefix, long instanceNr) + instance_format (string const& prefix, size_t instanceNr) { return _Fmt("%s.%03d") % prefix % instanceNr; } + string + instance_hex_format (string const& prefix, size_t instanceNr) + { + return _Fmt("%s.%04X") + % prefix % instanceNr; + } + } //(End)integration helpers... diff --git a/src/lib/idi/genfunc.hpp b/src/lib/idi/genfunc.hpp index 5728ac4ed..a9f6dac70 100644 --- a/src/lib/idi/genfunc.hpp +++ b/src/lib/idi/genfunc.hpp @@ -64,7 +64,8 @@ namespace idi { string demangled_innermost_component (const char* rawName); string demangled_sanitised_name (const char* rawName); - string instance_formatter (string const& prefix, long instanceNr); + string instance_format (string const& prefix, size_t instanceNr); + string instance_hex_format (string const& prefix, size_t instanceNr); } //(End)integration helpers... @@ -107,6 +108,18 @@ namespace idi { return typeSymbol(); } + /** designation of an distinct object instance + * @par obj pointer to the memory location of the object + * @return a notation "typename.hash", where the hash is given + * as 4 hex digits derived from the memory location + */ + template + inline string + instanceTypeID(const TY *const obj) + { + return format::instance_hex_format (namePrefix(), (size_t(obj) / alignof(TY)) % (1<<16)); + } + /** build a per-type identifier, with type prefix and running counter. * @return a type based prefix, followed by an instance number @@ -122,7 +135,7 @@ namespace idi { generateSymbolicID() { static TypedCounter instanceCounter; - return format::instance_formatter (namePrefix(), instanceCounter.inc()); + return format::instance_format (namePrefix(), instanceCounter.inc()); } /** diff --git a/src/lib/test/event-log.hpp b/src/lib/test/event-log.hpp index f2b5a21c4..30980ccc1 100644 --- a/src/lib/test/event-log.hpp +++ b/src/lib/test/event-log.hpp @@ -160,18 +160,24 @@ namespace test{ string logID_; Log log_; + void + log (std::initializer_list const&& ili) + { + log_.emplace_back(ili); + } + public: explicit EventLog (string logID) : logID_(logID) { - UNIMPLEMENTED("initial log entry"); + log({"type=EventLogHeader", "ID="+logID_}); } template explicit - EventLog (const X *const) - : EventLog(idi::typeSymbol()) + EventLog (const X *const obj) + : EventLog(idi::instanceTypeID (obj)) { } @@ -192,25 +198,18 @@ namespace test{ EventLog& event (string text) { + log({"type=event", text}); return *this; } - template - static string - instanceHash(const X *const) - { - UNIMPLEMENTED ("generate an object instance hash"); - } - - /* ==== Iteration ==== */ bool empty() const { - UNIMPLEMENTED ("collection behaviour"); + return 1 >= log_.size(); } diff --git a/tests/library/test/test-event-log-test.cpp b/tests/library/test/test-event-log-test.cpp index db6432542..4a6cb6a22 100644 --- a/tests/library/test/test-event-log-test.cpp +++ b/tests/library/test/test-event-log-test.cpp @@ -87,8 +87,9 @@ namespace test{ log.verify("α").before("β"); VERIFY_ERROR (ASSERTION, log.verify("β").before("α")); - CHECK (join(log) == "LOG::TestEventLog_test"+EventLog::instanceHash(this) - + ", Rec(event| |{α}), Rec(event| |{β})"); + CHECK (join(log) == "Rec(EventLogHeader| ID = TestEventLog_test."+idi::instanceTypeID(this)+" |), " + + "Rec(event| |{α}), " + + "Rec(event| |{β})"); }