Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

factorize the calls to the write filter per element #210

Merged
merged 1 commit into from
Jan 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions ebml/EbmlElement.h
Original file line number Diff line number Diff line change
Expand Up @@ -509,6 +509,10 @@ class EBML_DLL_API EbmlElement {
return SizePosition + CodedSizeLength(Size, SizeLength, bSizeIsFinite) + Size;
}

virtual bool CanWrite(ShouldWrite & writeFilter) const {
return writeFilter(*this);
}

protected:
/*!
\brief find any element in the stream
Expand Down
6 changes: 3 additions & 3 deletions src/EbmlElement.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -477,9 +477,9 @@ EbmlElement *EbmlElement::CreateElementUsingContext(const EbmlId & aID, const Eb
*/
filepos_t EbmlElement::Render(IOCallback & output, ShouldWrite writeFilter, bool bKeepPosition, bool bForceRender)
{
assert(bValueIsSet || writeFilter(*this)); // an element is been rendered without a value set !!!
assert(bValueIsSet || CanWrite(writeFilter)); // an element is been rendered without a value set !!!
// it may be a mandatory element without a default value
if (!writeFilter(*this)) {
if (!CanWrite(writeFilter)) {
return 0;
}
#if !defined(NDEBUG)
Expand Down Expand Up @@ -533,7 +533,7 @@ filepos_t EbmlElement::MakeRenderHead(IOCallback & output, bool bKeepPosition)

std::uint64_t EbmlElement::ElementSize(ShouldWrite writeFilter) const
{
if (!writeFilter(*this))
if (!CanWrite(writeFilter))
return 0; // won't be saved
return Size + EBML_ID_LENGTH((const EbmlId&)*this) + CodedSizeLength(Size, SizeLength, bSizeIsFinite);
}
Expand Down
2 changes: 1 addition & 1 deletion src/EbmlFloat.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ filepos_t EbmlFloat::RenderData(IOCallback & output, bool /* bForceRender */, Sh

std::uint64_t EbmlFloat::UpdateSize(ShouldWrite writeFilter, bool /* bForceRender */)
{
if (!writeFilter(*this))
if (!CanWrite(writeFilter))
return 0;
return GetSize();
}
Expand Down
6 changes: 3 additions & 3 deletions src/EbmlMaster.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,14 +59,14 @@ filepos_t EbmlMaster::RenderData(IOCallback & output, bool bForceRender, ShouldW

if (!bChecksumUsed) { // old school
for (auto Element : ElementList) {
if (!writeFilter(*Element))
if (!Element->CanWrite(writeFilter))
continue;
Result += Element->Render(output, writeFilter, false ,bForceRender);
}
} else { // new school
MemIOCallback TmpBuf(GetSize() - 6);
for (auto Element : ElementList) {
if (!writeFilter(*Element))
if (!Element->CanWrite(writeFilter))
continue;
Element->Render(TmpBuf, writeFilter, false ,bForceRender);
}
Expand Down Expand Up @@ -107,7 +107,7 @@ std::uint64_t EbmlMaster::UpdateSize(ShouldWrite writeFilter, bool bForceRender)
}

for (auto Element : ElementList) {
if (!writeFilter(*Element))
if (!Element->CanWrite(writeFilter))
continue;
Element->UpdateSize(writeFilter, bForceRender);
const std::uint64_t SizeToAdd = Element->ElementSize(writeFilter);
Expand Down
2 changes: 1 addition & 1 deletion src/EbmlSInteger.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ filepos_t EbmlSInteger::RenderData(IOCallback & output, bool /* bForceRender */,

std::uint64_t EbmlSInteger::UpdateSize(ShouldWrite writeFilter, bool /* bForceRender */)
{
if (!writeFilter(*this))
if (!CanWrite(writeFilter))
return 0;

const auto Value = GetValue();
Expand Down
2 changes: 1 addition & 1 deletion src/EbmlString.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ filepos_t EbmlString::RenderData(IOCallback & output, bool /* bForceRender */, S

std::uint64_t EbmlString::UpdateSize(ShouldWrite writeFilter, bool /* bForceRender */)
{
if (!writeFilter(*this))
if (!CanWrite(writeFilter))
return 0;

if (Value.length() < GetDefaultSize()) {
Expand Down
2 changes: 1 addition & 1 deletion src/EbmlUInteger.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ filepos_t EbmlUInteger::RenderData(IOCallback & output, bool /* bForceRender */,

std::uint64_t EbmlUInteger::UpdateSize(ShouldWrite writeFilter, bool /* bForceRender */)
{
if (!writeFilter(*this))
if (!CanWrite(writeFilter))
return 0;

const auto Value = GetValue();
Expand Down
2 changes: 1 addition & 1 deletion src/EbmlUnicodeString.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ std::string EbmlUnicodeString::GetValueUTF8() const {
*/
std::uint64_t EbmlUnicodeString::UpdateSize(ShouldWrite writeFilter, bool /* bForceRender */)
{
if (!writeFilter(*this))
if (!CanWrite(writeFilter))
return 0;

SetSize_(Value.GetUTF8().length());
Expand Down