michael@0: /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- michael@0: * michael@0: * This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: #include "nsNameSpaceMap.h" michael@0: #include "nsReadableUtils.h" michael@0: michael@0: nsNameSpaceMap::nsNameSpaceMap() michael@0: : mEntries(nullptr) michael@0: { michael@0: MOZ_COUNT_CTOR(nsNameSpaceMap); michael@0: } michael@0: michael@0: nsNameSpaceMap::~nsNameSpaceMap() michael@0: { michael@0: MOZ_COUNT_DTOR(nsNameSpaceMap); michael@0: michael@0: while (mEntries) { michael@0: Entry* doomed = mEntries; michael@0: mEntries = mEntries->mNext; michael@0: delete doomed; michael@0: } michael@0: } michael@0: michael@0: nsresult michael@0: nsNameSpaceMap::Put(const nsAString& aURI, nsIAtom* aPrefix) michael@0: { michael@0: nsCString uriUTF8; michael@0: AppendUTF16toUTF8(aURI, uriUTF8); michael@0: return Put(uriUTF8, aPrefix); michael@0: } michael@0: michael@0: nsresult michael@0: nsNameSpaceMap::Put(const nsCSubstring& aURI, nsIAtom* aPrefix) michael@0: { michael@0: Entry* entry; michael@0: michael@0: // Make sure we're not adding a duplicate michael@0: for (entry = mEntries; entry != nullptr; entry = entry->mNext) { michael@0: if (entry->mURI == aURI || entry->mPrefix == aPrefix) michael@0: return NS_ERROR_FAILURE; michael@0: } michael@0: michael@0: entry = new Entry(aURI, aPrefix); michael@0: if (! entry) michael@0: return NS_ERROR_OUT_OF_MEMORY; michael@0: michael@0: entry->mNext = mEntries; michael@0: mEntries = entry; michael@0: return NS_OK; michael@0: } michael@0: michael@0: nsNameSpaceMap::const_iterator michael@0: nsNameSpaceMap::GetNameSpaceOf(const nsCSubstring& aURI) const michael@0: { michael@0: for (Entry* entry = mEntries; entry != nullptr; entry = entry->mNext) { michael@0: if (StringBeginsWith(aURI, entry->mURI)) michael@0: return const_iterator(entry); michael@0: } michael@0: michael@0: return last(); michael@0: }