4#ifndef _Stroika_Frameworks_Led_MarkerCover_h_
5#define _Stroika_Frameworks_Led_MarkerCover_h_ 1
7#include "Stroika/Frameworks/StroikaPreComp.h"
24#include "Stroika/Frameworks/Led/Marker.h"
25#include "Stroika/Frameworks/Led/TextStore.h"
27namespace Stroika::Frameworks::Led {
48 template <
typename MARKER,
typename MARKERINFO,
typename INCREMENTALMARKERINFO>
49 class MarkerCover :
public virtual MarkerOwner {
51 using inherited = MarkerOwner;
54 using MarkerVector = vector<MARKER*>;
57 MarkerCover (TextStore& useTextStore, MARKERINFO defaultInfo = MARKERINFO ());
62 MarkerCover (
const MarkerCover&) =
delete;
63 void operator= (
const MarkerCover&) =
delete;
66 virtual TextStore* PeekAtTextStore ()
const override;
69 TextStore& fTextStore;
72 nonvirtual MarkerVector CollectAllInRange (
size_t from,
size_t to)
const;
73 nonvirtual MarkerVector CollectAllInRange_OrSurroundings (
size_t from,
size_t to)
const;
76 nonvirtual MarkerVector CollectAllNonEmptyInRange (
size_t from,
size_t to)
const;
77 nonvirtual MarkerVector CollectAllNonEmptyInRange_OrSurroundings (
size_t from,
size_t to)
const;
80 nonvirtual
const MARKERINFO& GetInfo (
size_t charAfterPos)
const;
81 nonvirtual MarkerVector GetInfoMarkers (
size_t charAfterPos,
size_t nTCharsFollowing)
const;
82 nonvirtual vector<pair<MARKERINFO, size_t>> GetInfo (
size_t charAfterPos,
size_t nTCharsFollowing)
const;
83 virtual void SetInfo (
size_t charAfterPos,
size_t nTCharsFollowing,
const INCREMENTALMARKERINFO& infoForMarkers);
84 virtual void SetInfos (
size_t charAfterPos,
const vector<pair<INCREMENTALMARKERINFO, size_t>>& infoForMarkers);
85 nonvirtual
void SetInfos2 (
size_t charAfterPos,
const vector<pair<MARKERINFO, size_t>>& infoForMarkers);
88 nonvirtual
void SetInfoInnerLoop (
size_t from,
size_t to,
const INCREMENTALMARKERINFO& infoForMarkers,
89 const UpdateInfo& allMarkersUpdateInfo, TextStore::SimpleUpdater** updater);
92 virtual void ConstrainSetInfoArgs (
size_t* charAfterPos,
size_t* nTCharsFollowing);
93 nonvirtual
void NoteCoverRangeDirtied (
size_t from,
size_t to);
94 virtual void NoteCoverRangeDirtied (
size_t from,
size_t to,
const MarkerVector& rangeAndSurroundingsMarkers);
97 virtual void AboutToUpdateText (
const UpdateInfo& updateInfo)
override;
98 virtual void EarlyDidUpdateText (
const UpdateInfo& updateInfo)
noexcept override;
99 virtual void DidUpdateText (
const UpdateInfo& updateInfo)
noexcept override;
102 nonvirtual
void CullZerod (
size_t around)
noexcept;
103 nonvirtual
void CullZerod (
const MarkerVector& rangeAndSurroundingsMarkers)
noexcept;
104 nonvirtual
void CheckForMerges (
size_t around)
noexcept;
105 nonvirtual
void CheckForMerges (
const MarkerVector& rangeAndSurroundingsMarkers)
noexcept;
108 mutable MarkerMortuary<MARKER> fMarkersToBeDeleted;
111 nonvirtual
void HandleCallBeforeDidUpdateComplete () const noexcept;
112 virtual
void HandleCallBeforeDidUpdateComplete_ () const noexcept;
115 mutable
bool fNeedExtraUpdateCheck;
116 mutable
bool fEarlyDidUpdateCalled;
117 UpdateInfo fNeedExtraUpdateCheck_UpdateInfo;
120 class NonEmptyOnes : public MarkersOfATypeMarkerSink2Vector<MARKER> {
122 using inherited = MarkersOfATypeMarkerSink2Vector<MARKER>;
131 virtual void Append (Marker* m)
override
133 if (m->GetLength () != 0) {
134 inherited::Append (m);
141 nonvirtual
void Invariant ()
const;
142#if qStroika_Foundation_Debug_AssertionsChecked
144 virtual void Invariant_ ()
const;
155#include "MarkerCover.inl"
void Append(TARGET_CONTAINER *v)