/* -*- Mode: C++; tab-width: 8; 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/. */

/* The nsIInterfaceInfoManager public declaration. */


#include "nsISupports.idl"
#include "nsIInterfaceInfo.idl"
#include "nsIEnumerator.idl"
#include "nsISimpleEnumerator.idl"

/* this is NOT intended to be scriptable */
[uuid(8B161900-BE2B-11d2-9831-006008962422)]
interface nsIInterfaceInfoManager : nsISupports
{
    nsIInterfaceInfo getInfoForIID(in nsIIDPtr iid);
    nsIInterfaceInfo getInfoForName(in string name);

    nsIIDPtr getIIDForName(in string name);
    string   getNameForIID(in nsIIDPtr iid);

    nsIEnumerator enumerateInterfaces();

    void autoRegisterInterfaces();

    nsIEnumerator enumerateInterfacesWhoseNamesStartWith(in string prefix);
};

[uuid(0ee22850-bc6a-11d5-9134-0010a4e73d9a)]
interface nsIInterfaceInfoSuperManager : nsIInterfaceInfoManager
{
    void addAdditionalManager(in nsIInterfaceInfoManager manager);        
    void removeAdditionalManager(in nsIInterfaceInfoManager manager);        

    boolean hasAdditionalManagers();
    nsISimpleEnumerator enumerateAdditionalManagers();
};

%{C++
#define NS_INTERFACEINFOMANAGER_SERVICE_CID            \
 { /* 13bef784-f8e0-4f96-85c1-09f9ef4f9a19 */          \
  0x13bef784, 0xf8e0, 0x4f96,                          \
  {0x85, 0xc1, 0x09, 0xf9, 0xef, 0x4f, 0x9a, 0x19} }  

#define NS_INTERFACEINFOMANAGER_SERVICE_CONTRACTID  \
   "@mozilla.org/xpti/interfaceinfomanager-service;1"
%}

