Skip to content
Snippets Groups Projects
Commit f7516c37 authored by rods%netscape.com's avatar rods%netscape.com
Browse files

AppCores are now mantained in a nsVoidArray

parent c2e6ccb3
No related branches found
No related tags found
No related merge requests found
...@@ -88,27 +88,23 @@ static NS_DEFINE_IID(kAppCoresFactoryCID, NS_APPCORESFACTORY_CID); ...@@ -88,27 +88,23 @@ static NS_DEFINE_IID(kAppCoresFactoryCID, NS_APPCORESFACTORY_CID);
static NS_DEFINE_IID(kMailCoreFactoryCID, NS_MAILCOREFACTORY_CID); static NS_DEFINE_IID(kMailCoreFactoryCID, NS_MAILCOREFACTORY_CID);
static SDL_TaskList *gTasks = nsnull;
static SDL_TaskList *gNextReadyTask = nsnull;
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
// nsAppCoresManager // nsAppCoresManager
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
nsAppCoresManager::nsAppCoresManager() nsAppCoresManager::nsAppCoresManager()
{ {
mScriptObject = nsnull; mScriptObject = nsnull;
IncInstanceCount(); IncInstanceCount();
NS_INIT_REFCNT(); NS_INIT_REFCNT();
} }
//-------------------------------------------------------- //--------------------------------------------------------
nsAppCoresManager::~nsAppCoresManager() nsAppCoresManager::~nsAppCoresManager()
{ {
DecInstanceCount(); DecInstanceCount();
} }
...@@ -121,41 +117,36 @@ NS_IMPL_RELEASE(nsAppCoresManager) ...@@ -121,41 +117,36 @@ NS_IMPL_RELEASE(nsAppCoresManager)
NS_IMETHODIMP NS_IMETHODIMP
nsAppCoresManager::QueryInterface(REFNSIID aIID,void** aInstancePtr) nsAppCoresManager::QueryInterface(REFNSIID aIID,void** aInstancePtr)
{ {
if (aInstancePtr == NULL) if (aInstancePtr == NULL) {
{ return NS_ERROR_NULL_POINTER;
return NS_ERROR_NULL_POINTER; }
}
// Always NULL result, in case of failure // Always NULL result, in case of failure
*aInstancePtr = NULL; *aInstancePtr = NULL;
if ( aIID.Equals(kIAppCoresManagerIID) ) {
nsIDOMAppCoresManager* tmp = this;
*aInstancePtr = (void*)tmp;
AddRef();
return NS_OK;
}
else if ( aIID.Equals(kIScriptObjectOwnerIID)) {
nsIScriptObjectOwner* tmp = this;
*aInstancePtr = (void*)tmp;
AddRef();
return NS_OK;
}
else if ( aIID.Equals(kISupportsIID) ) {
nsIDOMAppCoresManager* tmp1 = this;
nsISupports* tmp2 = tmp1;
if ( aIID.Equals(kIAppCoresManagerIID) ) *aInstancePtr = (void*)tmp2;
{ AddRef();
nsIDOMAppCoresManager* tmp = this; return NS_OK;
*aInstancePtr = (void*)tmp; }
AddRef();
return NS_OK;
}
else if ( aIID.Equals(kIScriptObjectOwnerIID))
{
nsIScriptObjectOwner* tmp = this;
*aInstancePtr = (void*)tmp;
AddRef();
return NS_OK;
}
else if ( aIID.Equals(kISupportsIID) )
{
nsIDOMAppCoresManager* tmp1 = this;
nsISupports* tmp2 = tmp1;
*aInstancePtr = (void*)tmp2;
AddRef();
return NS_OK;
}
return NS_NOINTERFACE; return NS_NOINTERFACE;
} }
...@@ -163,20 +154,17 @@ nsAppCoresManager::QueryInterface(REFNSIID aIID,void** aInstancePtr) ...@@ -163,20 +154,17 @@ nsAppCoresManager::QueryInterface(REFNSIID aIID,void** aInstancePtr)
NS_IMETHODIMP NS_IMETHODIMP
nsAppCoresManager::GetScriptObject(nsIScriptContext *aContext, void** aScriptObject) nsAppCoresManager::GetScriptObject(nsIScriptContext *aContext, void** aScriptObject)
{ {
nsresult res = NS_OK; nsresult res = NS_OK;
if (nsnull == mScriptObject)
{
nsIScriptGlobalObject *global = aContext->GetGlobalObject();
res = NS_NewScriptAppCoresManager(aContext, (nsISupports *)(nsIDOMAppCoresManager*)this, global, (void**)&mScriptObject);
NS_IF_RELEASE(global);
}
if (nsnull == mScriptObject) {
nsIScriptGlobalObject *global = aContext->GetGlobalObject();
res = NS_NewScriptAppCoresManager(aContext, (nsISupports *)(nsIDOMAppCoresManager*)this, global, (void**)&mScriptObject);
NS_IF_RELEASE(global);
}
*aScriptObject = mScriptObject; *aScriptObject = mScriptObject;
return res; return res;
} }
//-------------------------------------------------------- //--------------------------------------------------------
...@@ -191,118 +179,74 @@ nsAppCoresManager::SetScriptObject(void *aScriptObject) ...@@ -191,118 +179,74 @@ nsAppCoresManager::SetScriptObject(void *aScriptObject)
NS_IMETHODIMP NS_IMETHODIMP
nsAppCoresManager::Startup() nsAppCoresManager::Startup()
{ {
/***************************************/
/* Add us to the Javascript Name Space */
/***************************************/ /***************************************/
/* Add us to the Javascript Name Space */
/***************************************/
nsIScriptNameSetRegistry *registry;
nsresult result = nsServiceManager::GetService(kCScriptNameSetRegistryCID,
kIScriptNameSetRegistryIID,
(nsISupports **)&registry);
if (NS_OK == result) {
nsAppCoresNameSet* nameSet = new nsAppCoresNameSet();
registry->AddExternalNameSet(nameSet);
/* FIX - do we need to release this service? When we do, it get deleted,and our name is lost. */
}
return result;
}
nsIScriptNameSetRegistry *registry;
nsresult result = nsServiceManager::GetService(kCScriptNameSetRegistryCID,
kIScriptNameSetRegistryIID,
(nsISupports **)&registry);
if (NS_OK == result)
{
nsAppCoresNameSet* nameSet = new nsAppCoresNameSet();
registry->AddExternalNameSet(nameSet);
/* FIX - do we need to release this service? When we do, it get deleted,and our name is lost. */
}
return result; static PRBool CleanUp(void* aElement, void *aData)
{
nsIDOMBaseAppCore * appCore = (nsIDOMBaseAppCore *)aElement;
NS_RELEASE(appCore);
return PR_TRUE;
} }
//-------------------------------------------------------- //--------------------------------------------------------
NS_IMETHODIMP NS_IMETHODIMP
nsAppCoresManager::Shutdown() nsAppCoresManager::Shutdown()
{ {
return NS_OK; mList.EnumerateForwards(CleanUp, nsnull);
return NS_OK;
} }
//-------------------------------------------------------- //--------------------------------------------------------
NS_IMETHODIMP NS_IMETHODIMP
nsAppCoresManager::Add(nsIDOMBaseAppCore* aTask) nsAppCoresManager::Add(nsIDOMBaseAppCore* aAppCore)
{ {
if (aTask == NULL) if (aAppCore == NULL)
return NS_ERROR_FAILURE; return NS_ERROR_FAILURE;
/* Check to see if we already have this task in our list */ /* Check to see if we already have this task in our list */
SDL_TaskList *node = gTasks; nsString nodeIDString;
nsString nodeIDString; nsString addIDString;
nsString addIDString;
aAppCore->GetId(addIDString);
aTask->GetId(addIDString);
PRInt32 i;
while (node != NULL) for (i=0;i<mList.Count();i++) {
{ ((nsIDOMBaseAppCore *)mList[i])->GetId(nodeIDString);
node->task->GetId(nodeIDString);
if (nodeIDString == addIDString) {
if (nodeIDString == addIDString) /*we already have this ID in our list, ignore */
{ return NS_ERROR_FAILURE;
/*we already have this ID in our list, ignore */
return NS_OK;
}
node = node->next;
} }
}
/* add the task to our list */ aAppCore->AddRef();
SDL_TaskList* taskNode = (SDL_TaskList*)PR_MALLOC(sizeof(SDL_TaskList)); mList.AppendElement(aAppCore);
aTask->AddRef();
taskNode->next = gTasks;
taskNode->task = aTask;
gTasks = taskNode;
/* Lets set the next task to run to this one */ return NS_OK;
gNextReadyTask = taskNode;
return NS_OK;
} }
//-------------------------------------------------------- //--------------------------------------------------------
NS_IMETHODIMP NS_IMETHODIMP
nsAppCoresManager::Remove(nsIDOMBaseAppCore* aTask) nsAppCoresManager::Remove(nsIDOMBaseAppCore* aAppCore)
{ {
if (aTask == NULL) return (mList.RemoveElement(aAppCore)?NS_OK : NS_ERROR_FAILURE);
return NS_ERROR_FAILURE;
/* Remove from our list */
SDL_TaskList *node = gTasks;
SDL_TaskList *lastnode = gTasks;
nsString nodeIDString;
nsString doomedIDString;
aTask->GetId(doomedIDString);
while (node != NULL)
{
node->task->GetId(nodeIDString);
if (nodeIDString == doomedIDString)
{
/* we want to delete this node */
if (node == gTasks)
{
gTasks = node->next;
}
else
{
lastnode->next = node->next;
}
node->task->Release();
PR_DELETE(node);
break;
}
lastnode = node;
node = node->next;
}
return NS_OK;
} }
...@@ -310,25 +254,22 @@ nsAppCoresManager::Remove(nsIDOMBaseAppCore* aTask) ...@@ -310,25 +254,22 @@ nsAppCoresManager::Remove(nsIDOMBaseAppCore* aTask)
NS_IMETHODIMP NS_IMETHODIMP
nsAppCoresManager::Find(const nsString& aId, nsIDOMBaseAppCore** aReturn) nsAppCoresManager::Find(const nsString& aId, nsIDOMBaseAppCore** aReturn)
{ {
*aReturn=nsnull; *aReturn=nsnull;
SDL_TaskList *node = gTasks; nsString nodeIDString;
nsString nodeIDString;
PRInt32 i;
while (node != NULL) for (i=0;i<mList.Count();i++) {
{ nsIDOMBaseAppCore * appCore = (nsIDOMBaseAppCore *)mList.ElementAt(i);
node->task->GetId(nodeIDString); appCore->GetId(nodeIDString);
if (nodeIDString == aId) {
if (nodeIDString == aId) NS_ADDREF(appCore);
{ *aReturn = appCore;
*aReturn = node->task; return NS_OK;
node->task->AddRef();
break;
}
node = node->next;
} }
}
return NS_OK; return NS_OK;
} }
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include "nsIScriptObjectOwner.h" #include "nsIScriptObjectOwner.h"
#include "nsIDOMAppCoresManager.h" #include "nsIDOMAppCoresManager.h"
#include "prio.h" #include "prio.h"
#include "nsVoidArray.h"
class nsIScriptContext; class nsIScriptContext;
class nsIDOMBaseAppCore; class nsIDOMBaseAppCore;
...@@ -31,15 +32,6 @@ class nsIDOMBaseAppCore; ...@@ -31,15 +32,6 @@ class nsIDOMBaseAppCore;
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// nsAppCoresManager: // nsAppCoresManager:
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
typedef struct _SDL_TaskList SDL_TaskList;
typedef struct _SDL_TaskList
{
nsIDOMBaseAppCore *task;
SDL_TaskList *next;
} SDL_TaskList;
class nsAppCoresManager : public nsIScriptObjectOwner, public nsIDOMAppCoresManager class nsAppCoresManager : public nsIScriptObjectOwner, public nsIDOMAppCoresManager
{ {
public: public:
...@@ -63,7 +55,8 @@ class nsAppCoresManager : public nsIScriptObjectOwner, public nsIDOMAppCoresMana ...@@ -63,7 +55,8 @@ class nsAppCoresManager : public nsIScriptObjectOwner, public nsIDOMAppCoresMana
NS_IMETHOD Find(const nsString& aId, nsIDOMBaseAppCore** aReturn); NS_IMETHOD Find(const nsString& aId, nsIDOMBaseAppCore** aReturn);
private: private:
void *mScriptObject; void *mScriptObject;
nsVoidArray mList;
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment