gecko-dev/intl/strres/nsStringBundle.h
Kris Maglione 43de9e89bf Bug 1473135: Stop using ReentrantMonitor for string bundle mutexes. r=gandalf
MozReview-Commit-ID: HUfb47Eei7P

--HG--
extra : rebase_source : a6edf2f1163b799e9c62eb510d5e52e7a9d014b8
2018-07-20 17:20:00 -07:00

95 lines
2.6 KiB
C++

/* -*- Mode: C++; tab-width: 4; 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/. */
#ifndef nsStringBundle_h__
#define nsStringBundle_h__
#include "mozilla/Mutex.h"
#include "nsIStringBundle.h"
#include "nsIMemoryReporter.h"
#include "nsCOMPtr.h"
#include "nsString.h"
#include "nsCOMArray.h"
class nsIPersistentProperties;
class nsStringBundleBase : public nsIStringBundle
, public nsIMemoryReporter
{
public:
MOZ_DEFINE_MALLOC_SIZE_OF(MallocSizeOf)
nsresult ParseProperties(nsIPersistentProperties**);
NS_DECL_THREADSAFE_ISUPPORTS
NS_DECL_NSISTRINGBUNDLE
NS_DECL_NSIMEMORYREPORTER
virtual nsresult LoadProperties() = 0;
const nsCString& BundleURL() const { return mPropertiesURL; }
// Returns true if this bundle has more than one reference. If it has only
// a single reference, it is assumed to be held alive by the bundle cache.
bool IsShared() const { return mRefCnt > 1; }
static nsStringBundleBase* Cast(nsIStringBundle* aBundle)
{
return static_cast<nsStringBundleBase*>(aBundle);
}
template <typename T, typename... Args>
static already_AddRefed<T> Create(Args... args);
protected:
nsStringBundleBase(const char* aURLSpec);
virtual ~nsStringBundleBase();
virtual nsresult GetStringImpl(const nsACString& aName, nsAString& aResult) = 0;
virtual nsresult GetSimpleEnumerationImpl(nsISimpleEnumerator** elements) = 0;
void RegisterMemoryReporter();
nsCString mPropertiesURL;
mozilla::Mutex mMutex;
bool mAttemptedLoad;
bool mLoaded;
size_t SizeOfIncludingThisIfUnshared(mozilla::MallocSizeOf aMallocSizeOf) const override;
public:
static nsresult FormatString(const char16_t *formatStr,
const char16_t **aParams, uint32_t aLength,
nsAString& aResult);
};
class nsStringBundle : public nsStringBundleBase
{
public:
NS_DECL_ISUPPORTS_INHERITED
nsCOMPtr<nsIPersistentProperties> mProps;
nsresult LoadProperties() override;
size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const override;
protected:
friend class nsStringBundleBase;
explicit nsStringBundle(const char* aURLSpec);
virtual ~nsStringBundle();
nsresult GetStringImpl(const nsACString& aName, nsAString& aResult) override;
nsresult GetSimpleEnumerationImpl(nsISimpleEnumerator** elements) override;
};
#endif