mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-13 05:15:45 +00:00
164 lines
3.8 KiB
C++
164 lines
3.8 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
|
*
|
|
* The contents of this file are subject to the Netscape Public
|
|
* License Version 1.1 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS
|
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
* implied. See the License for the specific language governing
|
|
* rights and limitations under the License.
|
|
*
|
|
* The Original Code is mozilla.org code.
|
|
*
|
|
* The Initial Developer of the Original Code is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1999 Netscape Communications Corporation. All
|
|
* Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*/
|
|
|
|
#ifndef _MDB_
|
|
#include "mdb.h"
|
|
#endif
|
|
|
|
#ifndef _MORK_
|
|
#include "mork.h"
|
|
#endif
|
|
|
|
#ifndef _MORKNODE_
|
|
#include "morkNode.h"
|
|
#endif
|
|
|
|
#ifndef _MORKOBJECT_
|
|
#include "morkObject.h"
|
|
#endif
|
|
|
|
#ifndef _MORKENV_
|
|
#include "morkEnv.h"
|
|
#endif
|
|
|
|
#ifndef _MORKFACTORY_
|
|
#include "morkFactory.h"
|
|
#endif
|
|
|
|
#ifndef _ORKINFACTORY_
|
|
#include "orkinFactory.h"
|
|
#endif
|
|
|
|
#ifndef _ORKINHEAP_
|
|
#include "orkinHeap.h"
|
|
#endif
|
|
|
|
//3456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789
|
|
|
|
// ````` ````` ````` ````` `````
|
|
// { ===== begin morkNode interface =====
|
|
|
|
/*public virtual*/ void
|
|
morkFactory::CloseMorkNode(morkEnv* ev) /*i*/ // CloseFactory() only if open
|
|
{
|
|
if ( this->IsOpenNode() )
|
|
{
|
|
this->MarkClosing();
|
|
this->CloseFactory(ev);
|
|
this->MarkShut();
|
|
}
|
|
}
|
|
|
|
/*public virtual*/
|
|
morkFactory::~morkFactory() /*i*/ // assert CloseFactory() executed earlier
|
|
{
|
|
MORK_ASSERT(mFactory_Env.IsShutNode());
|
|
MORK_ASSERT(this->IsShutNode());
|
|
}
|
|
|
|
/*public non-poly*/
|
|
morkFactory::morkFactory() // uses orkinHeap
|
|
: morkObject(morkUsage::kGlobal, (nsIMdbHeap*) 0, morkColor_kNone)
|
|
, mFactory_Env(morkUsage::kMember, (nsIMdbHeap*) 0, this,
|
|
new orkinHeap())
|
|
, mFactory_Heap()
|
|
{
|
|
if ( mFactory_Env.Good() )
|
|
{
|
|
mNode_Derived = morkDerived_kFactory;
|
|
mNode_Refs += morkFactory_kWeakRefCountBonus;
|
|
}
|
|
}
|
|
|
|
/*public non-poly*/
|
|
morkFactory::morkFactory(nsIMdbHeap* ioHeap)
|
|
: morkObject(morkUsage::kHeap, ioHeap, morkColor_kNone)
|
|
, mFactory_Env(morkUsage::kMember, (nsIMdbHeap*) 0, this, ioHeap)
|
|
, mFactory_Heap()
|
|
{
|
|
if ( mFactory_Env.Good() )
|
|
{
|
|
mNode_Derived = morkDerived_kFactory;
|
|
mNode_Refs += morkFactory_kWeakRefCountBonus;
|
|
}
|
|
}
|
|
|
|
/*public non-poly*/
|
|
morkFactory::morkFactory(morkEnv* ev, /*i*/
|
|
const morkUsage& inUsage, nsIMdbHeap* ioHeap)
|
|
: morkObject(ev, inUsage, ioHeap, morkColor_kNone, (morkHandle*) 0)
|
|
, mFactory_Env(morkUsage::kMember, (nsIMdbHeap*) 0, this, ioHeap)
|
|
, mFactory_Heap()
|
|
{
|
|
if ( ev->Good() )
|
|
{
|
|
mNode_Derived = morkDerived_kFactory;
|
|
mNode_Refs += morkFactory_kWeakRefCountBonus;
|
|
}
|
|
}
|
|
|
|
/*public non-poly*/ void
|
|
morkFactory::CloseFactory(morkEnv* ev) /*i*/ // called by CloseMorkNode();
|
|
{
|
|
if ( this )
|
|
{
|
|
if ( this->IsNode() )
|
|
{
|
|
mFactory_Env.CloseMorkNode(ev);
|
|
this->CloseObject(ev);
|
|
this->MarkShut();
|
|
}
|
|
else
|
|
this->NonNodeError(ev);
|
|
}
|
|
else
|
|
ev->NilPointerError();
|
|
}
|
|
|
|
// } ===== end morkNode methods =====
|
|
// ````` ````` ````` ````` `````
|
|
|
|
nsIMdbFactory*
|
|
morkFactory::AcquireFactoryHandle(morkEnv* ev) // mObject_Handle
|
|
{
|
|
nsIMdbFactory* outFactory = 0;
|
|
orkinFactory* f = (orkinFactory*) mObject_Handle;
|
|
if ( f ) // have an old handle?
|
|
f->AddStrongRef(ev->AsMdbEnv());
|
|
else // need new handle?
|
|
{
|
|
f = orkinFactory::MakeFactory(ev, this);
|
|
mObject_Handle = f;
|
|
}
|
|
if ( f )
|
|
outFactory = f;
|
|
return outFactory;
|
|
}
|
|
|
|
void
|
|
morkFactory::NonFactoryTypeError(morkEnv* ev)
|
|
{
|
|
ev->NewError("non morkFactory");
|
|
}
|
|
|
|
//3456789_123456789_123456789_123456789_123456789_123456789_123456789_123456789
|