diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
commit | 6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch) | |
tree | a68f146d7fa01f0134297619fbe7e33db084e0aa /comm/mailnews/db/mork/morkSpace.cpp | |
parent | Initial commit. (diff) | |
download | thunderbird-upstream.tar.xz thunderbird-upstream.zip |
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'comm/mailnews/db/mork/morkSpace.cpp')
-rw-r--r-- | comm/mailnews/db/mork/morkSpace.cpp | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/comm/mailnews/db/mork/morkSpace.cpp b/comm/mailnews/db/mork/morkSpace.cpp new file mode 100644 index 0000000000..d3b1980089 --- /dev/null +++ b/comm/mailnews/db/mork/morkSpace.cpp @@ -0,0 +1,136 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef _MDB_ +# include "mdb.h" +#endif + +#ifndef _MORK_ +# include "mork.h" +#endif + +#ifndef _MORKNODE_ +# include "morkNode.h" +#endif + +#ifndef _MORKMAP_ +# include "morkMap.h" +#endif + +#ifndef _MORKSPACE_ +# include "morkSpace.h" +#endif + +#ifndef _MORKMAP_ +# include "morkMap.h" +#endif + +#ifndef _MORKENV_ +# include "morkEnv.h" +#endif + +#ifndef _MORKSTORE_ +# include "morkStore.h" +#endif + +// 456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789 + +// ````` ````` ````` ````` ````` +// { ===== begin morkNode interface ===== + +/*public virtual*/ void morkSpace::CloseMorkNode( + morkEnv* ev) // CloseSpace() only if open +{ + if (this->IsOpenNode()) { + this->MarkClosing(); + this->CloseSpace(ev); + this->MarkShut(); + } +} + +/*public virtual*/ +morkSpace::~morkSpace() // assert CloseSpace() executed earlier +{ + MORK_ASSERT(SpaceScope() == 0); + MORK_ASSERT(mSpace_Store == 0); + MORK_ASSERT(this->IsShutNode()); +} + +/*public non-poly*/ +// morkSpace::morkSpace(morkEnv* ev, const morkUsage& inUsage, +// nsIMdbHeap* ioNodeHeap, const morkMapForm& inForm, +// nsIMdbHeap* ioSlotHeap) +//: morkNode(ev, inUsage, ioNodeHeap) +//, mSpace_Map(ev, morkUsage::kMember, (nsIMdbHeap*) 0, ioSlotHeap) +//{ +// ev->StubMethodOnlyError(); +//} + +/*public non-poly*/ +morkSpace::morkSpace(morkEnv* ev, const morkUsage& inUsage, mork_scope inScope, + morkStore* ioStore, nsIMdbHeap* ioHeap, + nsIMdbHeap* ioSlotHeap) + : morkBead(ev, inUsage, ioHeap, inScope), + mSpace_Store(0), + mSpace_DoAutoIDs(morkBool_kFalse), + mSpace_HaveDoneAutoIDs(morkBool_kFalse), + mSpace_CanDirty(morkBool_kFalse) // only when store can be dirtied +{ + if (ev->Good()) { + if (ioStore && ioSlotHeap) { + morkStore::SlotWeakStore(ioStore, ev, &mSpace_Store); + + mSpace_CanDirty = ioStore->mStore_CanDirty; + if (mSpace_CanDirty) // this new space dirties the store? + this->MaybeDirtyStoreAndSpace(); + + if (ev->Good()) mNode_Derived = morkDerived_kSpace; + } else + ev->NilPointerError(); + } +} + +/*public non-poly*/ void morkSpace::CloseSpace( + morkEnv* ev) // called by CloseMorkNode(); +{ + if (this->IsNode()) { + morkStore::SlotWeakStore((morkStore*)0, ev, &mSpace_Store); + mBead_Color = 0; // this->CloseBead(); + this->MarkShut(); + } else + this->NonNodeError(ev); +} + +// } ===== end morkNode methods ===== +// ````` ````` ````` ````` ````` + +/*static*/ void morkSpace::NonAsciiSpaceScopeName(morkEnv* ev) { + ev->NewError("SpaceScope() > 0x7F"); +} + +/*static*/ void morkSpace::NilSpaceStoreError(morkEnv* ev) { + ev->NewError("nil mSpace_Store"); +} + +morkPool* morkSpace::GetSpaceStorePool() const { + return &mSpace_Store->mStore_Pool; +} + +mork_bool morkSpace::MaybeDirtyStoreAndSpace() { + morkStore* store = mSpace_Store; + if (store && store->mStore_CanDirty) { + store->SetStoreDirty(); + mSpace_CanDirty = morkBool_kTrue; + } + + if (mSpace_CanDirty) { + this->SetSpaceDirty(); + return morkBool_kTrue; + } + + return morkBool_kFalse; +} + +// 456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789 |