Bug 1712849 [wpt PR 29110] - Keep 3D points in a quad coplanar when clamping them...
[gecko.git] / intl / strres / nsStringBundle.h
blobc5a847b7c7a2668fa5bbc1dcb8bd549ebb1e45ef
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 #ifndef nsStringBundle_h__
7 #define nsStringBundle_h__
9 #include "mozilla/Mutex.h"
10 #include "nsIStringBundle.h"
11 #include "nsIMemoryReporter.h"
12 #include "nsCOMPtr.h"
13 #include "nsString.h"
14 #include "nsCOMArray.h"
16 class nsIPersistentProperties;
18 class nsStringBundleBase : public nsIStringBundle, public nsIMemoryReporter {
19 public:
20 MOZ_DEFINE_MALLOC_SIZE_OF(MallocSizeOf)
22 nsresult ParseProperties(nsIPersistentProperties**);
24 NS_DECL_THREADSAFE_ISUPPORTS
25 NS_DECL_NSISTRINGBUNDLE
26 NS_DECL_NSIMEMORYREPORTER
28 virtual nsresult LoadProperties() = 0;
30 const nsCString& BundleURL() const { return mPropertiesURL; }
32 // Returns true if this bundle has more than one reference. If it has only
33 // a single reference, it is assumed to be held alive by the bundle cache.
34 bool IsShared() const { return mRefCnt > 1; }
36 static nsStringBundleBase* Cast(nsIStringBundle* aBundle) {
37 return static_cast<nsStringBundleBase*>(aBundle);
40 template <typename T, typename... Args>
41 static already_AddRefed<T> Create(Args... args);
43 protected:
44 nsStringBundleBase(const char* aURLSpec);
46 virtual ~nsStringBundleBase();
48 virtual nsresult GetStringImpl(const nsACString& aName,
49 nsAString& aResult) = 0;
51 virtual nsresult GetSimpleEnumerationImpl(nsISimpleEnumerator** elements) = 0;
53 void RegisterMemoryReporter();
55 nsCString mPropertiesURL;
56 mozilla::Mutex mMutex;
57 bool mAttemptedLoad;
58 bool mLoaded;
60 size_t SizeOfIncludingThisIfUnshared(
61 mozilla::MallocSizeOf aMallocSizeOf) const override;
63 public:
64 static nsresult FormatString(const char16_t* formatStr,
65 const nsTArray<nsString>& aParams,
66 nsAString& aResult);
69 class nsStringBundle : public nsStringBundleBase {
70 public:
71 NS_DECL_ISUPPORTS_INHERITED
73 nsCOMPtr<nsIPersistentProperties> mProps;
75 nsresult LoadProperties() override;
77 size_t SizeOfIncludingThis(
78 mozilla::MallocSizeOf aMallocSizeOf) const override;
80 protected:
81 friend class nsStringBundleBase;
83 explicit nsStringBundle(const char* aURLSpec);
85 virtual ~nsStringBundle();
87 nsresult GetStringImpl(const nsACString& aName, nsAString& aResult) override;
89 nsresult GetSimpleEnumerationImpl(nsISimpleEnumerator** elements) override;
92 #endif