summaryrefslogtreecommitdiffstats
path: root/xpcom/ds/nsIAtom.idl
diff options
context:
space:
mode:
Diffstat (limited to 'xpcom/ds/nsIAtom.idl')
-rw-r--r--xpcom/ds/nsIAtom.idl166
1 files changed, 166 insertions, 0 deletions
diff --git a/xpcom/ds/nsIAtom.idl b/xpcom/ds/nsIAtom.idl
new file mode 100644
index 000000000..c02540838
--- /dev/null
+++ b/xpcom/ds/nsIAtom.idl
@@ -0,0 +1,166 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* 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/. */
+#include "nsISupports.idl"
+
+%{C++
+#include "nsStringGlue.h"
+#include "nsCOMPtr.h"
+#include "nsStringBuffer.h"
+%}
+
+native MallocSizeOf(mozilla::MallocSizeOf);
+
+/*
+ * Should this really be scriptable? Using atoms from script or proxies
+ * could be dangerous since double-wrapping could lead to loss of
+ * pointer identity.
+ */
+
+[scriptable, builtinclass, uuid(8b8c11d4-3ed5-4079-8974-73c7576cdb34)]
+interface nsIAtom : nsISupports
+{
+ /**
+ * Get the Unicode or UTF8 value for the string
+ */
+ [binaryname(ScriptableToString)] AString toString();
+ [noscript] AUTF8String toUTF8String();
+
+ /**
+ * Compare the atom to a specific string value
+ * Note that this will NEVER return/throw an error condition.
+ */
+ [binaryname(ScriptableEquals)] boolean equals(in AString aString);
+
+ [noscript, notxpcom]
+ size_t SizeOfIncludingThis(in MallocSizeOf aMallocSizeOf);
+
+%{C++
+ // note this is NOT virtual so this won't muck with the vtable!
+ inline bool Equals(const nsAString& aString) const {
+ return aString.Equals(nsDependentString(mString, mLength));
+ }
+
+ inline bool IsStaticAtom() const {
+ return mIsStatic;
+ }
+
+ inline char16ptr_t GetUTF16String() const {
+ return mString;
+ }
+
+ inline uint32_t GetLength() const {
+ return mLength;
+ }
+
+ inline void ToString(nsAString& aBuf) {
+ // See the comment on |mString|'s declaration.
+ nsStringBuffer::FromData(mString)->ToString(mLength, aBuf);
+ }
+
+ inline nsStringBuffer* GetStringBuffer() const {
+ // See the comment on |mString|'s declaration.
+ return nsStringBuffer::FromData(mString);
+ }
+
+ /**
+ * A hashcode that is better distributed than the actual atom
+ * pointer, for use in situations that need a well-distributed
+ * hashcode.
+ */
+ inline uint32_t hash() const {
+ return mHash;
+ }
+
+protected:
+ uint32_t mLength:31;
+ uint32_t mIsStatic:1;
+ uint32_t mHash;
+ /**
+ * WARNING! There is an invisible constraint on |mString|: the chars it
+ * points to must belong to an nsStringBuffer. This is so that the
+ * nsStringBuffer::FromData() calls above are valid.
+ */
+ char16_t* mString;
+%}
+};
+
+
+%{C++
+/*
+ * The four forms of NS_Atomize (for use with |nsCOMPtr<nsIAtom>|) return the
+ * atom for the string given. At any given time there will always be one atom
+ * representing a given string. Atoms are intended to make string comparison
+ * cheaper by simplifying it to pointer equality. A pointer to the atom that
+ * does not own a reference is not guaranteed to be valid.
+ */
+
+
+/**
+ * Find an atom that matches the given UTF-8 string.
+ * The string is assumed to be zero terminated. Never returns null.
+ */
+extern already_AddRefed<nsIAtom> NS_Atomize(const char* aUTF8String);
+
+/**
+ * Find an atom that matches the given UTF-8 string. Never returns null.
+ */
+extern already_AddRefed<nsIAtom> NS_Atomize(const nsACString& aUTF8String);
+
+/**
+ * Find an atom that matches the given UTF-16 string.
+ * The string is assumed to be zero terminated. Never returns null.
+ */
+extern already_AddRefed<nsIAtom> NS_Atomize(const char16_t* aUTF16String);
+
+/**
+ * Find an atom that matches the given UTF-16 string. Never returns null.
+ */
+extern already_AddRefed<nsIAtom> NS_Atomize(const nsAString& aUTF16String);
+
+/**
+ * Return a count of the total number of atoms currently
+ * alive in the system.
+ */
+extern nsrefcnt NS_GetNumberOfAtoms(void);
+
+/**
+ * Return a pointer for a static atom for the string or null if there's
+ * no static atom for this string.
+ */
+extern nsIAtom* NS_GetStaticAtom(const nsAString& aUTF16String);
+
+/**
+ * Seal the static atom table
+ */
+extern void NS_SealStaticAtomTable();
+
+class nsAtomString : public nsString
+{
+public:
+ explicit nsAtomString(nsIAtom* aAtom)
+ {
+ aAtom->ToString(*this);
+ }
+};
+
+class nsAtomCString : public nsCString
+{
+public:
+ explicit nsAtomCString(nsIAtom* aAtom)
+ {
+ aAtom->ToUTF8String(*this);
+ }
+};
+
+class nsDependentAtomString : public nsDependentString
+{
+public:
+ explicit nsDependentAtomString(nsIAtom* aAtom)
+ : nsDependentString(aAtom->GetUTF16String(), aAtom->GetLength())
+ {
+ }
+};
+
+%}