/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * The contents of this file are subject to the Netscape Public License * Version 1.0 (the "NPL"); you may not use this file except in * compliance with the NPL. You may obtain a copy of the NPL at * http://www.mozilla.org/NPL/ * * Software distributed under the NPL is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL * for the specific language governing rights and limitations under the * NPL. * * The Initial Developer of this code under the NPL is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998 Netscape Communications Corporation. All Rights * Reserved. */ #ifndef nsISizeOfHandler_h___ #define nsISizeOfHandler_h___ #include "nscore.h" #include "nsISupports.h" /* c028d1f0-fc9e-11d1-89e4-006008911b81 */ #define NS_ISIZEOF_HANDLER_IID \ { 0xc028d1f0, 0xfc9e, 0x11d1, {0x89, 0xe4, 0x00, 0x60, 0x08, 0x91, 0x1b, 0x81}} /** * An API to managing a sizeof computation of an arbitrary graph. * The handler is responsible for remembering which objects have been * seen before. Note that the handler doesn't hold references to * nsISupport's objects; the assumption is that the objects being * sized are stationary and will not be modified during the sizing * computation and therefore do not need an extra reference count. */ class nsISizeOfHandler : public nsISupports { public: /** * Add in a simple size value to the running total. * Always returns NS_OK. */ NS_IMETHOD Add(size_t aSize) = 0; /** * Update aResult with PR_TRUE if the object has been traversed * by the sizeof computation before. Otherwise aResult is set to * PR_FALSE and the object is added to the internal database * of objects that have been traversed. It's ok to pass a null * pointer in; aResult will be set to PR_TRUE so you won't accidently * try to traverse through null pointer. * * Note: This violates the COM API standard on purpose; so there! */ virtual PRBool HaveSeen(void* anObject) = 0; /** * Return the currently computed size. * Always returns NS_OK. */ NS_IMETHOD GetSize(PRUint32& aResult) = 0; }; extern NS_BASE nsresult NS_NewSizeOfHandler(nsISizeOfHandler** aInstancePtrResult); #endif /* nsISizeofHandler_h___ */