ImagingTools Core SDK
CMaskContainer.h
1// SPDX-License-Identifier: LGPL-2.1-or-later OR GPL-2.0-or-later OR GPL-3.0-or-later OR LicenseRef-ImtCore-Commercial
2#pragma once
3
4
5// Qt includes
6#include <QtCore/QList>
7#include <QtCore/QPair>
8
9// ImtCore includes
10#include <imtmdbx/imtmdbx.h>
11#include <imtmdbx/IMaskContainer.h>
12
13
14namespace imtmdbx
15{
16
17
18class CMaskContainer:
19 virtual public IMask,
20 virtual public IMaskContainer
21{
22public:
23 enum OperationType
24 {
25 OT_OR,
26 OT_AND
27 };
28
29 CMaskContainer(OperationType operationType);
30
31 // reimplemented (imtmdbx::IMask)
32 virtual bool GetUnit(quint64 position) override;
33 virtual bool SetUnit(quint64 position, bool unit) override;
34
35 virtual bool GetItem(quint64 offset, quint64& item) override;
36 virtual bool SetItem(quint64 offset, quint64 item) override;
37
38 virtual bool GetNearestOffset(quint64& offset, quint64 startOffset = 0) override;
39 virtual bool GetNextItemOffset(quint64& offset, quint64 startOffset = -1) override;
40 virtual bool GetPreviosItemOffset(quint64& offset, quint64 startOffset = 0xffffffffffffff) override;
41
42 // reimplemented (imtmdbx::IMaskContainer)
43 virtual void AddMask(IMask* mask, bool isInversion = false) override;
44 virtual void Clear() override;
45 virtual bool RemoveLastMask(bool isInversion = false) override;
46 virtual bool RemoveMask(int index, int n = 1, bool isInversion = false) override;
47 virtual int GetMaskCount(bool isInversion = false) override;
48 virtual void SetDocumentTable(IDocumentTable* documentTable) override;
49 virtual quint64 GetUnitCount() override;
50 virtual QList<quint64> GetUnitPositions(quint64 offset = 0, quint64 limit = -1) override;
51 virtual QList<QByteArray> GetDocuments(quint64 offset = 0, quint64 limit = -1) override;
52
53 void Erase();
54 bool isEmpty();
55 bool GetActiveItem(quint64& activeOffset, quint64& activeItem, bool isStart);
56
57protected:
58 QList<QPair<IMask*/*maskPtr*/,quint64/*nextOffset*/>> m_maskList;
59 QList<QPair<IMask*/*maskPtr*/,quint64/*nextOffset*/>> m_maskListInv;
60 OperationType m_operationType;
61 IDocumentTable* m_documentTable;
62};
63
64
65}//namespace imtmdbx
66