mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 913923 - Part a: Move UnionMember into its own header; r=dzbarsky
This commit is contained in:
parent
614277f4ef
commit
eb01beb01a
@ -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>
|
||||
|
@ -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)
|
||||
|
55
dom/bindings/UnionMember.h
Normal file
55
dom/bindings/UnionMember.h
Normal 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
|
@ -27,6 +27,7 @@ EXPORTS.mozilla.dom += [
|
||||
'Nullable.h',
|
||||
'PrimitiveConversions.h',
|
||||
'TypedArray.h',
|
||||
'UnionMember.h',
|
||||
]
|
||||
|
||||
FAIL_ON_WARNINGS = True
|
||||
|
Loading…
Reference in New Issue
Block a user