Bug 913923 - Part a: Move UnionMember into its own header; r=dzbarsky

This commit is contained in:
Ms2ger 2013-09-10 09:03:37 +02:00
parent 614277f4ef
commit eb01beb01a
4 changed files with 57 additions and 31 deletions

View File

@ -1612,37 +1612,6 @@ ConvertJSValueToByteString(JSContext* cx, JS::Handle<JS::Value> v,
JS::MutableHandle<JS::Value> pval, bool nullable,
nsACString& result);
// Class for holding the type of members of a union. The union type has an enum
// to keep track of which of its UnionMembers has been constructed.
template<class T>
class UnionMember {
AlignedStorage2<T> storage;
public:
T& SetValue() {
new (storage.addr()) T();
return *storage.addr();
}
template <typename T1>
T& SetValue(const T1 &t1)
{
new (storage.addr()) T(t1);
return *storage.addr();
}
template <typename T1, typename T2>
T& SetValue(const T1 &t1, const T2 &t2)
{
new (storage.addr()) T(t1, t2);
return *storage.addr();
}
const T& Value() const {
return *storage.addr();
}
void Destroy() {
storage.addr()->~T();
}
};
template<typename T>
void DoTraceSequence(JSTracer* trc, FallibleTArray<T>& seq);
template<typename T>

View File

@ -10522,6 +10522,7 @@ struct PrototypeTraits;
config.getCallbacks(),
config)
includes.add("mozilla/dom/BindingUtils.h")
includes.add("mozilla/dom/UnionMember.h")
# Wrap all of that in our namespaces.
curr = CGNamespace.build(['mozilla', 'dom'], unions)

View File

@ -0,0 +1,55 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* 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/. */
/* A class for holding the members of a union. */
#ifndef mozilla_dom_UnionMember_h
#define mozilla_dom_UnionMember_h
#include "mozilla/Alignment.h"
namespace mozilla {
namespace dom {
// The union type has an enum to keep track of which of its UnionMembers has
// been constructed.
template<class T>
class UnionMember
{
AlignedStorage2<T> mStorage;
public:
T& SetValue()
{
new (mStorage.addr()) T();
return *mStorage.addr();
}
template <typename T1>
T& SetValue(const T1& aValue)
{
new (mStorage.addr()) T(aValue);
return *mStorage.addr();
}
template<typename T1, typename T2>
T& SetValue(const T1& aValue1, const T2& aValue2)
{
new (mStorage.addr()) T(aValue1, aValue2);
return *mStorage.addr();
}
const T& Value() const
{
return *mStorage.addr();
}
void Destroy()
{
mStorage.addr()->~T();
}
};
} // namespace dom
} // namespace mozilla
#endif // mozilla_dom_UnionMember_h

View File

@ -27,6 +27,7 @@ EXPORTS.mozilla.dom += [
'Nullable.h',
'PrimitiveConversions.h',
'TypedArray.h',
'UnionMember.h',
]
FAIL_ON_WARNINGS = True