BufferProvider: completely restore DiagnosticBufferProvider_test
It covers now roughly the same procedures as before, yet the scheme how to do verification is quite different. Furthermore, we allocate large random-sized buffers now and implant `TestFrame` instances, and so also the verification covers a significant storage area.
This commit is contained in:
parent
191667197d
commit
064651335f
3 changed files with 240 additions and 83 deletions
|
|
@ -20,8 +20,10 @@
|
|||
#include "lib/test/run.hpp"
|
||||
#include "steam/engine/diagnostic-buffer-provider.hpp"
|
||||
#include "steam/engine/testframe.hpp"
|
||||
#include "lib/test/diagnostic-output.hpp"//////////////////TODO
|
||||
#include "lib/util.hpp"
|
||||
|
||||
#include <algorithm>
|
||||
#include <cstddef>
|
||||
#include <vector>
|
||||
|
||||
|
||||
|
|
@ -29,13 +31,13 @@ namespace steam {
|
|||
namespace engine{
|
||||
namespace test {
|
||||
|
||||
using util::isSameAdr;
|
||||
using util::isSameObject;
|
||||
|
||||
namespace { // Test fixture
|
||||
|
||||
const size_t TEST_ELM_SIZE = sizeof(uint);
|
||||
const uint MAX_ELMS = 50;
|
||||
|
||||
std::vector<uint> testNumbers(MAX_ELMS);
|
||||
const uint NUM_ELMS = 50;
|
||||
std::vector<uint> testNumbers(NUM_ELMS);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -55,7 +57,7 @@ namespace test {
|
|||
|
||||
simpleExample();
|
||||
verifyStandardCase();
|
||||
verifyTestProtocol();
|
||||
verifyIntrospection();
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -88,10 +90,10 @@ namespace test {
|
|||
{
|
||||
DiagnosticBufferProvider provider;
|
||||
|
||||
BuffDescr buffType = provider.getDescriptorFor(TEST_ELM_SIZE);
|
||||
uint numElms = provider.announce(MAX_ELMS, buffType);
|
||||
BuffDescr buffType = provider.getDescriptorFor(sizeof(int));
|
||||
uint numElms = provider.announce(NUM_ELMS, buffType);
|
||||
CHECK (0 < numElms);
|
||||
CHECK (numElms <= MAX_ELMS);
|
||||
CHECK (numElms <= NUM_ELMS);
|
||||
|
||||
for (uint i=0; i<numElms; ++i)
|
||||
{
|
||||
|
|
@ -103,7 +105,7 @@ namespace test {
|
|||
|
||||
for (uint nr=0; nr<numElms; ++nr)
|
||||
{
|
||||
diagn::Block block = watch(provider).created[0];
|
||||
diagn::Block block = watch(provider).created[nr];
|
||||
CHECK (HashVal(block) == block.stateKey);
|
||||
CHECK (HashVal(buffType) == block.typeKey);
|
||||
CHECK (testNumbers[nr] == block.accessAs<uint>());
|
||||
|
|
@ -117,11 +119,13 @@ namespace test {
|
|||
|
||||
|
||||
void
|
||||
verifyTestProtocol()
|
||||
verifyIntrospection()
|
||||
{
|
||||
DiagnosticBufferProvider provider;
|
||||
|
||||
BuffDescr buffType = provider.getDescriptorFor(TEST_ELM_SIZE);
|
||||
// using large yet untyped buffers this time....
|
||||
const size_t BUFF_SIZ = sizeof(TestFrame) * (1+rani(100));
|
||||
BuffDescr buffType = provider.getDescriptorFor(BUFF_SIZ);
|
||||
|
||||
BuffHandle bu1 = provider.lockBuffer (buffType);
|
||||
BuffHandle bu2 = provider.lockBuffer (buffType);
|
||||
|
|
@ -129,23 +133,48 @@ namespace test {
|
|||
BuffHandle bu4 = provider.lockBuffer (buffType);
|
||||
BuffHandle bu5 = provider.lockBuffer (buffType);
|
||||
|
||||
// buffers are locked,
|
||||
// but still within the per-type allocation pool
|
||||
// while the output sequence is still empty
|
||||
// CHECK (!provider.access_emitted(0).was_used()); ///////////////////////////////OOO provide suitable diagnostic API!
|
||||
// CHECK (!provider.access_emitted(1).was_used());
|
||||
// CHECK (!provider.access_emitted(2).was_used());
|
||||
// CHECK (!provider.access_emitted(3).was_used());
|
||||
// CHECK (!provider.access_emitted(4).was_used());
|
||||
// buffers are all locked now;
|
||||
// thus the instrumentation built into DiagnosticBufferProvider
|
||||
// should have encountered and recorded each of them, indexed by hash-ID.
|
||||
auto inspect = watch(provider);
|
||||
CHECK (5 == inspect.created.cnt());
|
||||
CHECK (inspect.was_created(bu1));
|
||||
CHECK (inspect.was_created(bu2));
|
||||
CHECK (inspect.was_created(bu3));
|
||||
CHECK (inspect.was_created(bu4));
|
||||
CHECK (inspect.was_created(bu5));
|
||||
CHECK (inspect.is_in_use (bu1));
|
||||
CHECK (inspect.is_in_use (bu2));
|
||||
CHECK (inspect.is_in_use (bu3));
|
||||
CHECK (inspect.is_in_use (bu4));
|
||||
CHECK (inspect.is_in_use (bu5));
|
||||
CHECK (not inspect.was_used(bu1));
|
||||
CHECK (not inspect.was_used(bu2));
|
||||
CHECK (not inspect.was_used(bu3));
|
||||
CHECK (not inspect.was_used(bu4));
|
||||
CHECK (not inspect.was_used(bu5));
|
||||
CHECK (not inspect.was_released(bu1));
|
||||
CHECK (not inspect.was_released(bu2));
|
||||
CHECK (not inspect.was_released(bu3));
|
||||
CHECK (not inspect.was_released(bu4));
|
||||
CHECK (not inspect.was_released(bu5));
|
||||
|
||||
// can use the buffers for real
|
||||
bu1.accessAs<uint>() = 1;
|
||||
bu2.accessAs<uint>() = 2;
|
||||
bu3.accessAs<uint>() = 3;
|
||||
bu4.accessAs<uint>() = 4;
|
||||
bu5.accessAs<uint>() = 5;
|
||||
using std::byte;
|
||||
byte* raw = & bu1.accessAs<byte>();
|
||||
std::fill (raw, raw+BUFF_SIZ, byte{0xff});
|
||||
CHECK (bu1.accessAs<uint32_t>() == 0xffffffff);
|
||||
CHECK (not bu1.accessAs<TestFrame>().isSane());
|
||||
|
||||
// CHECK (0 == provider.emittedCnt()); ///////////////////////////////OOO provide suitable diagnostic API!
|
||||
new(bu1.rawStorage()) TestFrame{1};
|
||||
new(bu2.rawStorage()) TestFrame{2};
|
||||
new(bu3.rawStorage()) TestFrame{3};
|
||||
new(bu4.rawStorage()) TestFrame{4};
|
||||
new(bu5.rawStorage()) TestFrame{5};
|
||||
|
||||
CHECK (bu1.accessAs<TestFrame>().isPristine());
|
||||
|
||||
CHECK (0 == inspect.emitted.cnt());
|
||||
|
||||
// now emit buffers in shuffled order
|
||||
provider.emitBuffer (bu3);
|
||||
|
|
@ -154,41 +183,58 @@ namespace test {
|
|||
provider.emitBuffer (bu4);
|
||||
provider.emitBuffer (bu2);
|
||||
|
||||
// CHECK (5 == provider.emittedCnt()); ///////////////////////////////OOO provide suitable diagnostic API!
|
||||
CHECK (5 == inspect.emitted.cnt());
|
||||
|
||||
// CHECK (3 == provider.accessAs<uint>(0)); ///////////////////////////////OOO provide suitable diagnostic API!
|
||||
// CHECK (1 == provider.accessAs<uint>(1));
|
||||
// CHECK (5 == provider.accessAs<uint>(2));
|
||||
// CHECK (4 == provider.accessAs<uint>(3));
|
||||
// CHECK (2 == provider.accessAs<uint>(4));
|
||||
CHECK (testData(3) == inspect.emitted[0].get().storage);
|
||||
CHECK (testData(1) == inspect.emitted[1].get().storage);
|
||||
CHECK (testData(5) == inspect.emitted[2].get().storage);
|
||||
CHECK (testData(4) == inspect.emitted[3].get().storage);
|
||||
CHECK (testData(2) == inspect.emitted[4].get().storage);
|
||||
|
||||
CHECK (0 == inspect.released.cnt());
|
||||
|
||||
// CHECK ( provider.access_emitted(0).was_used()); ///////////////////////////////OOO provide suitable diagnostic API!
|
||||
// CHECK ( provider.access_emitted(1).was_used());
|
||||
// CHECK ( provider.access_emitted(2).was_used());
|
||||
// CHECK ( provider.access_emitted(3).was_used());
|
||||
// CHECK ( provider.access_emitted(4).was_used());
|
||||
|
||||
// CHECK (!provider.access_emitted(0).was_closed());
|
||||
// CHECK (!provider.access_emitted(1).was_closed());
|
||||
// CHECK (!provider.access_emitted(2).was_closed());
|
||||
// CHECK (!provider.access_emitted(3).was_closed());
|
||||
// CHECK (!provider.access_emitted(4).was_closed());
|
||||
CHECK (inspect.was_emitted(bu1));
|
||||
CHECK (inspect.was_emitted(bu2));
|
||||
CHECK (inspect.was_emitted(bu3));
|
||||
CHECK (inspect.was_emitted(bu4));
|
||||
CHECK (inspect.was_emitted(bu5));
|
||||
// Note fine point: they are in transitory state,
|
||||
// thus usage is neither present, nor in the past...
|
||||
CHECK (not inspect.is_in_use(bu1));
|
||||
CHECK (not inspect.is_in_use(bu2));
|
||||
CHECK (not inspect.is_in_use(bu3));
|
||||
CHECK (not inspect.is_in_use(bu4));
|
||||
CHECK (not inspect.is_in_use(bu5));
|
||||
CHECK (not inspect.was_used (bu1));
|
||||
CHECK (not inspect.was_used (bu2));
|
||||
CHECK (not inspect.was_used (bu3));
|
||||
CHECK (not inspect.was_used (bu4));
|
||||
CHECK (not inspect.was_used (bu5));
|
||||
|
||||
bu5.release();
|
||||
// CHECK (!provider.access_emitted(0).was_closed());
|
||||
// CHECK (!provider.access_emitted(1).was_closed());
|
||||
// CHECK ( provider.access_emitted(2).was_closed());
|
||||
// CHECK (!provider.access_emitted(3).was_closed());
|
||||
// CHECK (!provider.access_emitted(4).was_closed());
|
||||
CHECK (not bu5);
|
||||
CHECK (not bu5.isAllotted());
|
||||
CHECK (not inspect.is_in_use(bu5));
|
||||
CHECK ( inspect.was_used (bu5));
|
||||
|
||||
CHECK (not bu2);
|
||||
CHECK ( bu2.isAllotted());
|
||||
CHECK (not inspect.was_used (bu2));
|
||||
CHECK (not inspect.was_released(bu2));
|
||||
CHECK (1 == inspect.released.cnt());
|
||||
|
||||
bu2.release();
|
||||
bu2.release();
|
||||
bu5.release();
|
||||
// CHECK (!provider.access_emitted(0).was_closed());
|
||||
// CHECK (!provider.access_emitted(1).was_closed());
|
||||
// CHECK ( provider.access_emitted(2).was_closed());
|
||||
// CHECK (!provider.access_emitted(3).was_closed());
|
||||
// CHECK ( provider.access_emitted(4).was_closed());
|
||||
CHECK (2 == inspect.released.cnt());
|
||||
// simply because the redundant call was suppressed
|
||||
CHECK (testData(5) == inspect.released[0].get().storage);
|
||||
CHECK (testData(2) == inspect.released[1].get().storage);
|
||||
|
||||
// when invoked directly on BufferProvider interface,
|
||||
// redundant call is suppressed with a warning log
|
||||
provider.releaseBuffer(bu5);
|
||||
CHECK (2 == inspect.released.cnt());
|
||||
|
||||
CHECK (not bu2.isValid());
|
||||
CHECK (not bu3.isValid());
|
||||
|
|
@ -204,7 +250,25 @@ namespace test {
|
|||
CHECK (not bu3.isAllotted());
|
||||
CHECK (not bu4.isAllotted());
|
||||
CHECK (not bu5.isAllotted());
|
||||
// CHECK (5 == provider.emittedCnt()); ///////////////////////////////OOO provide suitable diagnostic API!
|
||||
|
||||
CHECK (5 == inspect.released.cnt());
|
||||
// buffer data is recorded in order of occurrence
|
||||
CHECK (testData(5) == inspect.released[0].get().storage);
|
||||
CHECK (testData(2) == inspect.released[1].get().storage);
|
||||
CHECK (testData(1) == inspect.released[2].get().storage);
|
||||
CHECK (testData(3) == inspect.released[3].get().storage);
|
||||
CHECK (testData(4) == inspect.released[4].get().storage);
|
||||
// Instrumentation keeps separate records for each stage of the protocol
|
||||
CHECK (testData(3) == inspect.emitted[0].get().storage);
|
||||
CHECK (testData(1) == inspect.emitted[1].get().storage);
|
||||
CHECK (testData(5) == inspect.emitted[2].get().storage);
|
||||
CHECK (testData(4) == inspect.emitted[3].get().storage);
|
||||
CHECK (testData(2) == inspect.emitted[4].get().storage);
|
||||
|
||||
CHECK (not isSameObject (inspect.created[0] , inspect.emitted[1]));
|
||||
CHECK (not isSameObject (inspect.emitted[1] , inspect.released[2]));
|
||||
CHECK ( isSameAdr (inspect.created[0].get().storage, inspect.emitted[1].get().storage));
|
||||
CHECK ( isSameAdr (inspect.emitted[1].get().storage, inspect.released[2].get().storage));
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ namespace test {
|
|||
|
||||
|
||||
/** @test demonstrate that random number sequences can be reproduced
|
||||
* - use a rigged SeedNucleus, always returning a fixed sees
|
||||
* - use a rigged SeedNucleus, always returning a fixed seed
|
||||
* - build two distinct random sequence generators, yet seeded
|
||||
* from the same source; they will produce the same sequence
|
||||
* - sequences can be re-shuffled by a seed value, so that
|
||||
|
|
|
|||
|
|
@ -112019,22 +112019,22 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1770762458610" ID="ID_875010759" MODIFIED="1770762816021" TEXT="DiagnosticBufferProvider anpassen">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node COLOR="#338800" CREATED="1770762458610" ID="ID_875010759" MODIFIED="1771368302291" TEXT="DiagnosticBufferProvider anpassen">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1770762470929" ID="ID_424124774" MODIFIED="1770762479035" TEXT="das bleibt definitiv ein BufferProvider"/>
|
||||
<node CREATED="1770762480074" ID="ID_491907312" MODIFIED="1770762498009" TEXT="⟹ muß nun von BufferProviderSetup erben"/>
|
||||
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1770762499600" ID="ID_578552888" MODIFIED="1770762808614" TEXT="wird sich dann aber in die Implementierungen einschleifen">
|
||||
<node COLOR="#435e98" CREATED="1770762499600" ID="ID_578552888" MODIFIED="1771368322955" TEXT="soll sich dann aber in die Implementierungen einschleifen">
|
||||
<icon BUILTIN="yes"/>
|
||||
<icon BUILTIN="hourglass"/>
|
||||
<node CREATED="1770762537848" ID="ID_744233976" MODIFIED="1770762552653" TEXT="zunächst noch delegiert er direkt an HeapMemBufferStore">
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1770762537848" ID="ID_744233976" MODIFIED="1771368348692" TEXT="zunächst noch delegiert er direkt an HeapMemBufferStore">
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<node CREATED="1770762554389" ID="ID_1159011250" MODIFIED="1770762561380" TEXT="das war ja früher mal ein BufferProvider"/>
|
||||
<node CREATED="1770762562345" ID="ID_1608322135" MODIFIED="1770762574873" TEXT="und hat ein (ungeschickt) verbreitertes API"/>
|
||||
<node CREATED="1770762576523" ID="ID_100975131" MODIFIED="1770766811720" TEXT="hatte aber Glück im Unglück">
|
||||
<arrowlink COLOR="#feeace" DESTINATION="ID_1432411040" ENDARROW="Default" ENDINCLINATION="-12;81;" ID="Arrow_ID_76937966" STARTARROW="None" STARTINCLINATION="-199;19;"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1770762675673" ID="ID_246224479" MODIFIED="1770762789759" TEXT="soll dann aber im nächsten Schritt das Tracking selber implementieren">
|
||||
<icon BUILTIN="hourglass"/>
|
||||
<node COLOR="#338800" CREATED="1770762675673" ID="ID_246224479" MODIFIED="1771368336879" TEXT="soll dann aber im nächsten Schritt das Tracking selber implementieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node CREATED="1770762688231" ID="ID_1626867644" MODIFIED="1770762782204" TEXT="und wird sich dafür vstl. Dekoratoren über die Implementierungs-Klassen legen">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
|
|
@ -112135,9 +112135,9 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
|||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1770771357183" ID="ID_1793741597" MODIFIED="1771335733911" TEXT="DiagnosticBufferProviderTest anpassen">
|
||||
<node COLOR="#338800" CREATED="1770771357183" ID="ID_1793741597" MODIFIED="1771368271862" TEXT="DiagnosticBufferProviderTest anpassen">
|
||||
<linktarget COLOR="#445360" DESTINATION="ID_1793741597" ENDARROW="Default" ENDINCLINATION="-253;1171;" ID="Arrow_ID_389390476" SOURCE="ID_832109359" STARTARROW="Default" STARTINCLINATION="512;-1514;"/>
|
||||
<icon BUILTIN="flag-pink"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#d70247" CREATED="1770771371541" ID="ID_318424657" MODIFIED="1770771443467" TEXT="der hat bisher gar nicht auf dem DiagnosticBufferProvider gearbeitet">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
</node>
|
||||
|
|
@ -112159,16 +112159,96 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
|||
<linktarget COLOR="#00ce05" DESTINATION="ID_1760377258" ENDARROW="Default" ENDINCLINATION="422;359;" ID="Arrow_ID_1963224116" SOURCE="ID_92329444" STARTARROW="None" STARTINCLINATION="1800;235;"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1771354592102" ID="ID_157531527" MODIFIED="1771354606424" TEXT="Diagnose findet nicht den korrekten Inhalt im Buffer">
|
||||
<node COLOR="#435e98" CREATED="1771354592102" FOLDED="true" ID="ID_157531527" MODIFIED="1771359138253" TEXT="Diagnose findet nicht den korrekten Inhalt im Buffer">
|
||||
<icon BUILTIN="broken-line"/>
|
||||
<node CREATED="1771354620091" ID="ID_789673449" MODIFIED="1771354625918" TEXT="in verifyStandardCase()">
|
||||
<node CREATED="1771354633241" ID="ID_1686053511" MODIFIED="1771354683348" TEXT="legt Zufallszahl in einen lokal gehaltenen Vector">
|
||||
<icon BUILTIN="info"/>
|
||||
<icon BUILTIN="button_cancel"/>
|
||||
<node CREATED="1771354620091" ID="ID_789673449" MODIFIED="1771359068230" TEXT="in verifyStandardCase()">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
Zufallszahlen in lokal gehaltenem Vektor; müßten dann auch im Speicherblock zu finden sein...
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1771354649063" ID="ID_1577643970" MODIFIED="1771354680515" TEXT="diese Zufallszahl müßte dann im referenzierten Speicherblock zu finden sein">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#ae099e" CREATED="1771359078135" ID="ID_325360151" MODIFIED="1771359118319" TEXT="sind sie auch ... wenn man nicht immer Index ≡ 0 anschaut">
|
||||
<icon BUILTIN="smiley-oh"/>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1771360379259" ID="ID_1462216817" MODIFIED="1771368274476" TEXT="jetzt noch den letzten Testfall sinngemäß modernisieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#5b280f" CREATED="1771360399235" ID="ID_698277565" MODIFIED="1771360486104" TEXT="sollte nicht mehr von einem »Test Protocol« reden">
|
||||
<richcontent TYPE="NOTE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
das zeigt nämlich gut die Stelle, an der ich in die Falle gefallen bin; stattessen haben wir nun (hoffentlich) <i>deklarative </i>Diagnose-Funktionen
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<icon BUILTIN="stop-sign"/>
|
||||
</node>
|
||||
<node CREATED="1771360487997" ID="ID_1884248019" MODIFIED="1771360491577" TEXT="Namens-Suche">
|
||||
<node BACKGROUND_COLOR="#accdc3" COLOR="#3f4015" CREATED="1771360492740" ID="ID_1633010475" MODIFIED="1771360519425" STYLE="fork" TEXT="ChatGPT gefragt">
|
||||
<edge COLOR="#808080" STYLE="bezier" WIDTH="thin"/>
|
||||
<icon BUILTIN="wizard"/>
|
||||
<node CREATED="1771360526775" ID="ID_628448850" MODIFIED="1771360531180" TEXT="diagnosticDevice"/>
|
||||
<node CREATED="1771360532552" ID="ID_332102290" MODIFIED="1771360540449" TEXT="diagnosticAccess"/>
|
||||
<node CREATED="1771360573031" ID="ID_1204505149" MODIFIED="1771360582680" TEXT=".... diverse Variationen mit *test*"/>
|
||||
<node CREATED="1771360584343" ID="ID_512266484" MODIFIED="1771360589747" TEXT="diagnostics"/>
|
||||
<node CREATED="1771360600982" ID="ID_1325259312" MODIFIED="1771360622888" TEXT="soweit alles genau das auf was ich auch gekommen wäre">
|
||||
<font ITALIC="true" NAME="SansSerif" SIZE="12"/>
|
||||
</node>
|
||||
<node CREATED="1771360590747" ID="ID_1532058073" MODIFIED="1771360596087" TEXT="inspector">
|
||||
<icon BUILTIN="forward"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1771360628879" ID="ID_1525691266" MODIFIED="1771360634274" TEXT="spreche nun von....">
|
||||
<node CREATED="1771360635541" ID="ID_161220145" MODIFIED="1771360644073" TEXT="»Introspection«"/>
|
||||
<node BACKGROUND_COLOR="#eccda7" CREATED="1771360645205" ID="ID_651488390" MODIFIED="1771360750193" STYLE="bubble">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
benenne die Variable verbal: 
|
||||
</p>
|
||||
<p>
|
||||
<font color="#4a1a65" face="Bitstream Vera Sans Mono" size="9pt"><b>auto</b></font><font color="#3a1f18" face="Bitstream Vera Sans Mono" size="9pt"> </font><font color="#814422" face="Bitstream Vera Sans Mono" size="9pt">inspect</font><font color="#3a1f18" face="Bitstream Vera Sans Mono" size="9pt"> </font><font color="#65533c" face="Bitstream Vera Sans Mono" size="9pt">=</font><font color="#3a1f18" face="Bitstream Vera Sans Mono" size="9pt"> </font><font color="#000000" face="Bitstream Vera Sans Mono" size="9pt">watch</font><font color="#11123a" face="Bitstream Vera Sans Mono" size="9pt">(</font><font color="#b45858" face="Bitstream Vera Sans Mono" size="9pt"><b>provider</b></font><font color="#11123a" face="Bitstream Vera Sans Mono" size="9pt">)</font><font color="#65533c" face="Bitstream Vera Sans Mono" size="9pt">;</font>
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<edge COLOR="#201ccb"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1771360758940" ID="ID_318818630" MODIFIED="1771368280809">
|
||||
<richcontent TYPE="NODE"><html>
|
||||
<head>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<p>
|
||||
außerdem: <b>TestFrame</b> kann inzwischen viel mehr ....
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
</richcontent>
|
||||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1771360784807" ID="ID_1657955100" MODIFIED="1771360797070" TEXT="sollte einen deutlich größeren Buffer nehmen"/>
|
||||
<node CREATED="1771360798301" ID="ID_735423157" MODIFIED="1771360810709" TEXT="sollte aber dann einen TestFrame einpflanzen"/>
|
||||
<node CREATED="1771360812417" ID="ID_1616989213" MODIFIED="1771360825356" TEXT="(dieses mal ohne ihn als Typ zu deklarieren)"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1771335749973" ID="ID_431521592" MODIFIED="1771335763465" TEXT="BufferProviderProtocol_test ebenfalls versäubern">
|
||||
|
|
@ -112585,7 +112665,7 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
|||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1770590107914" ID="ID_1076311206" MODIFIED="1770868047833" TEXT="dafür die Implementierung aufdoppeln">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1770868050721" ID="ID_284746248" MODIFIED="1770868068498" TEXT="Problem: ich will den schönen Namen diagn::Block">
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1770868050721" ID="ID_284746248" MODIFIED="1771368369369" TEXT="Problem: ich will den schönen Namen diagn::Block">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1770868073742" ID="ID_551184019" MODIFIED="1770868235638" TEXT="Leider hängt jetzt die Implementierung vom HeapMemProvider praktisch in der Luft">
|
||||
|
|
@ -112707,15 +112787,23 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
|||
<icon BUILTIN="idea"/>
|
||||
<node CREATED="1770923400575" ID="ID_1931478017" MODIFIED="1770923481144" TEXT="wirft bei out-of-bounds"/>
|
||||
<node CREATED="1770923418466" ID="ID_1875722112" MODIFIED="1770923481144" TEXT="wirft bei nicht gefundenem Hash"/>
|
||||
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1771368433367" ID="ID_1134908661" MODIFIED="1771368458685" TEXT="unschön dabei: man kann nicht direkt auf das Resultat als Buffer-Objekt zugreifen">
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
</node>
|
||||
</node>
|
||||
</node>
|
||||
<node COLOR="#338800" CREATED="1770923537976" ID="ID_377154413" MODIFIED="1770923576533" TEXT="BlockTracker: pImpl für die Registries">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
<node CREATED="1770923506886" ID="ID_1357520947" MODIFIED="1770923513693" TEXT="drei Registries bieten">
|
||||
<node CREATED="1770923514549" ID="ID_1515553777" MODIFIED="1770923517021" TEXT="created"/>
|
||||
<node CREATED="1770923518029" ID="ID_1772560536" MODIFIED="1770923520830" TEXT="emitted"/>
|
||||
<node CREATED="1770923523535" ID="ID_1351841539" MODIFIED="1770923526850" TEXT="released"/>
|
||||
<node COLOR="#338800" CREATED="1770923506886" ID="ID_1357520947" MODIFIED="1771368465149" TEXT="drei Registries bieten">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#435e98" CREATED="1770923514549" ID="ID_1515553777" MODIFIED="1771368469387" TEXT="created"/>
|
||||
<node COLOR="#435e98" CREATED="1770923518029" ID="ID_1772560536" MODIFIED="1771368469408" TEXT="emitted"/>
|
||||
<node COLOR="#435e98" CREATED="1770923523535" ID="ID_1351841539" MODIFIED="1771368469408" TEXT="released"/>
|
||||
</node>
|
||||
<node COLOR="#435e98" CREATED="1771368492616" ID="ID_962912472" MODIFIED="1771368550973" TEXT="darauf aufsetzend: weitere Such/Auswertungsfunktionen...">
|
||||
<arrowlink COLOR="#3b82d5" DESTINATION="ID_1738368338" ENDARROW="Default" ENDINCLINATION="-686;-15;" ID="Arrow_ID_141211857" STARTARROW="None" STARTINCLINATION="57;507;"/>
|
||||
<icon BUILTIN="yes"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1770917107132" ID="ID_1518034296" MODIFIED="1770923603446" TEXT="Tracking">
|
||||
|
|
@ -112894,11 +112982,11 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
|||
<icon BUILTIN="button_ok"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1771276599801" ID="ID_1205105935" MODIFIED="1771276627247" TEXT="Einschleifen der Instrumentierung">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1771276524376" ID="ID_1462598861" MODIFIED="1771276643962" TEXT="Instrumentierungs-Dekorator anlegen">
|
||||
<node COLOR="#338800" CREATED="1771276599801" ID="ID_1205105935" MODIFIED="1771368755354" TEXT="Einschleifen der Instrumentierung">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node COLOR="#338800" CREATED="1771276524376" ID="ID_1462598861" MODIFIED="1771368696992" TEXT="Instrumentierungs-Dekorator anlegen">
|
||||
<linktarget COLOR="#1334c3" DESTINATION="ID_1462598861" ENDARROW="Default" ENDINCLINATION="-63;-1181;" ID="Arrow_ID_169512531" SOURCE="ID_1590901542" STARTARROW="None" STARTINCLINATION="-588;23;"/>
|
||||
<icon BUILTIN="flag-yellow"/>
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1771276666297" ID="ID_80656960" MODIFIED="1771276686235" TEXT="mit dem nun angelegten API genügt es, die BufferStage zu dekorieren">
|
||||
<icon BUILTIN="idea"/>
|
||||
</node>
|
||||
|
|
@ -112919,7 +113007,11 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
|||
<icon BUILTIN="help"/>
|
||||
</node>
|
||||
</node>
|
||||
<node CREATED="1771282534052" ID="ID_1418547018" MODIFIED="1771282553829" TEXT="es gibt eigentlich nur eine Konstruktor-Funktion: beim Locking"/>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1771282534052" ID="ID_1418547018" MODIFIED="1771368702646" TEXT="es gibt eigentlich nur eine Konstruktor-Funktion: beim Locking">
|
||||
<icon BUILTIN="idea"/>
|
||||
<node COLOR="#435e98" CREATED="1771368709906" ID="ID_1314516535" MODIFIED="1771368750546" TEXT="die weiteren Schritte kopieren einfach den Block als Ganzes"/>
|
||||
<node COLOR="#435e98" CREATED="1771368729065" ID="ID_1249000123" MODIFIED="1771368750546" TEXT="Status ergibt sich dabei ja einfach aus der Registry, in der er liegt"/>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1771282627528" ID="ID_1818084511" MODIFIED="1771288198657" TEXT="Sichtbarkeits-Problem: nur BufferProvider kann einen BuffDescr erzeugen">
|
||||
<linktarget COLOR="#8f3733" DESTINATION="ID_1818084511" ENDARROW="Default" ENDINCLINATION="113;-5;" ID="Arrow_ID_563529884" SOURCE="ID_1137207493" STARTARROW="None" STARTINCLINATION="-19;22;"/>
|
||||
<icon BUILTIN="messagebox_warning"/>
|
||||
|
|
@ -112977,9 +113069,10 @@ StM_bind(Builder<R1> b1, Extension<R1,R2> extension)
|
|||
<font NAME="SansSerif" SIZE="15"/>
|
||||
</node>
|
||||
</node>
|
||||
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1771354374515" ID="ID_1321428037" MODIFIED="1771354395410" TEXT="kann nun wichtigste Diagnose-Prädikate implementieren">
|
||||
<icon BUILTIN="pencil"/>
|
||||
<node CREATED="1771354409079" ID="ID_1738368338" MODIFIED="1771354457778" TEXT="als »thin layer« über den neuen Daten-Records">
|
||||
<node COLOR="#338800" CREATED="1771354374515" ID="ID_1321428037" MODIFIED="1771368762431" TEXT="kann nun wichtigste Diagnose-Prädikate implementieren">
|
||||
<icon BUILTIN="button_ok"/>
|
||||
<node CREATED="1771354409079" ID="ID_1738368338" MODIFIED="1771368550973" TEXT="als »thin layer« über den neuen Daten-Records">
|
||||
<linktarget COLOR="#3b82d5" DESTINATION="ID_1738368338" ENDARROW="Default" ENDINCLINATION="-686;-15;" ID="Arrow_ID_141211857" SOURCE="ID_962912472" STARTARROW="None" STARTINCLINATION="57;507;"/>
|
||||
<icon BUILTIN="idea"/>
|
||||
<node COLOR="#435e98" CREATED="1771354438502" ID="ID_968197209" MODIFIED="1771354452311" TEXT="diagn::Block"/>
|
||||
<node COLOR="#435e98" CREATED="1771354442770" ID="ID_27714735" MODIFIED="1771354452312" TEXT="diagn::StateReg"/>
|
||||
|
|
|
|||
Loading…
Reference in a new issue