00001 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */00002 /* ***** BEGIN LICENSE BLOCK *****00003 * Version: MPL 1.1/GPL 2.0/LGPL 2.100004 *00005 * The contents of this file are subject to the Mozilla Public License Version00006 * 1.1 (the "License"); you may not use this file except in compliance with00007 * the License. You may obtain a copy of the License at00008 * http://www.mozilla.org/MPL/00009 *00010 * Software distributed under the License is distributed on an "AS IS" basis,00011 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License00012 * for the specific language governing rights and limitations under the00013 * License.00014 *00015 * The Original Code is mozilla.org code.00016 *00017 * The Initial Developer of the Original Code is00018 * Netscape Communications Corporation.00019 * Portions created by the Initial Developer are Copyright (C) 199800020 * the Initial Developer. All Rights Reserved.00021 *00022 * Contributor(s):00023 *00024 * Alternatively, the contents of this file may be used under the terms of00025 * either of the GNU General Public License Version 2 or later (the "GPL"),00026 * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),00027 * in which case the provisions of the GPL or the LGPL are applicable instead00028 * of those above. If you wish to allow use of your version of this file only00029 * under the terms of either the GPL or the LGPL, and not to allow others to00030 * use your version of this file under the terms of the MPL, indicate your00031 * decision by deleting the provisions above and replace them with the notice00032 * and other provisions required by the GPL or the LGPL. If you do not delete00033 * the provisions above, a recipient may use your version of this file under00034 * the terms of any one of the MPL, the GPL or the LGPL.00035 *00036 * ***** END LICENSE BLOCK ***** */00037
00038 #ifndef nsStringBundleService_h__00039 #define nsStringBundleService_h__00040 00041 #include "prclist.h"00042 #include "plarena.h"00043
00044 #include "nsCOMPtr.h"00045 #include "nsHashtable.h"00046 #include "nsIPersistentProperties2.h"00047 #include "nsIStringBundle.h"00048 #include "nsIObserver.h"00049 #include "nsWeakReference.h"00050 #include "nsIErrorService.h"00051 #include "nsIStringBundleOverride.h"00052
00053 struct bundleCacheEntry_t;
00054
00055class nsStringBundleService : publicnsIStringBundleService,
00056 publicnsIObserver,
00057 public nsSupportsWeakReference
00058 {
00059 public:
00060 nsStringBundleService();
00061 virtual~nsStringBundleService();
00062
00063 nsresultInit();
00064
00065 NS_DECL_ISUPPORTS00066 NS_DECL_NSISTRINGBUNDLESERVICE
00067 NS_DECL_NSIOBSERVER
00068
00069 private:
00070 nsresultgetStringBundle(constchar *aUrl, nsIStringBundle** aResult);
00071 nsresultFormatWithBundle(nsIStringBundle* bundle, nsresult aStatus,
00072 PRUint32 argCount, PRUnichar** argArray,
00073 PRUnichar* *result);
00074
00075 voidflushBundleCache();
00076
00077 bundleCacheEntry_t *insertIntoCache(nsIStringBundle *aBundle,
00078 nsCStringKey *aHashKey);
00079
00080 staticvoidrecycleEntry(bundleCacheEntry_t*);
00081
00082 nsHashtable mBundleMap;
00083 PRCList mBundleCache;
00084PLArenaPoolmCacheEntryPool;
00085
00086nsCOMPtr<nsIErrorService>mErrorService;
00087nsCOMPtr<nsIStringBundleOverride>mOverrideStrings;
00088 };
00089
00090 #endif