forked from Mirrors/openclonk
Stop checking for rvalue ref support
We already require support for std::unique_ptr, which itself requires support for rvalue references. As such, we know we can use rvalue references, and thus don't have to keep carrying dead code around.shapetextures
parent
d1313f622f
commit
6a11e3e811
|
@ -86,7 +86,6 @@ if(USE_GCC_STD_0X)
|
|||
endif()
|
||||
|
||||
REQUIRE_CXX_SOURCE_COMPILES("#include <memory>\nint main() { std::unique_ptr<int> a; std::shared_ptr<int> b; }" HAVE_C11_SMART_PTRS)
|
||||
CHECK_CXX_SOURCE_COMPILES("void f(struct D&&); int main() { return 0; }" HAVE_RVALUE_REF)
|
||||
CHECK_CXX_SOURCE_COMPILES("int main() { void *d = nullptr; }" HAVE_NULLPTR)
|
||||
CHECK_CXX_SOURCE_COMPILES("int main() { static_assert(true, \"\"); }" HAVE_STATIC_ASSERT)
|
||||
CHECK_CXX_SOURCE_COMPILES("#include <memory>\nint main() { auto a = std::make_unique<int>(0); }" HAVE_MAKE_UNIQUE)
|
||||
|
|
|
@ -52,9 +52,6 @@
|
|||
/* Define to 1 if you have the <readline/readline.h> header file. */
|
||||
#cmakedefine HAVE_READLINE_READLINE_H 1
|
||||
|
||||
/* C++ Compiler has rvalue references, a C++0x feature. */
|
||||
#cmakedefine HAVE_RVALUE_REF 1
|
||||
|
||||
/* Define to 1 if you have SDL. */
|
||||
#cmakedefine HAVE_SDL 1
|
||||
|
||||
|
|
|
@ -81,7 +81,7 @@ private:
|
|||
class LoadError : public StdStrBuf
|
||||
{
|
||||
public:
|
||||
LoadError(StdStrBuf RREF rTakeFrom) { Take(std::move(rTakeFrom)); }
|
||||
LoadError(StdStrBuf &&rTakeFrom) { Take(std::move(rTakeFrom)); }
|
||||
}; // class thrown off load function if load failed
|
||||
};
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@ template <class T> struct C4StrValAdapt
|
|||
template <class D> inline bool operator == (const D &nValue) const { return rValue == nValue; }
|
||||
template <class D> inline C4StrValAdapt<T> &operator = (const D &nValue) { rValue = nValue; return *this; }
|
||||
};
|
||||
template <class T> inline C4StrValAdapt<T> mkStrValAdapt(T RREF rValue, C4InVal::ValidationOption eValType) { return C4StrValAdapt<T>(rValue, eValType); }
|
||||
template <class T> inline C4StrValAdapt<T> mkStrValAdapt(T &&rValue, C4InVal::ValidationOption eValType) { return C4StrValAdapt<T>(rValue, eValType); }
|
||||
|
||||
// StdStrBuf that validates on compilation
|
||||
struct ValidatedStdCopyStrBufBase : public StdCopyStrBuf
|
||||
|
|
|
@ -62,7 +62,7 @@ struct StdDefaultAdapt
|
|||
}
|
||||
};
|
||||
template <class T, class D>
|
||||
inline StdDefaultAdapt<T, D> mkDefaultAdapt(T RREF rValue, const D &rDefault) { return StdDefaultAdapt<T, D>(rValue, rDefault); }
|
||||
inline StdDefaultAdapt<T, D> mkDefaultAdapt(T &&rValue, const D &rDefault) { return StdDefaultAdapt<T, D>(rValue, rDefault); }
|
||||
|
||||
// * Naming Adaptor
|
||||
// Embeds a value into a named section, failsafe
|
||||
|
@ -90,7 +90,7 @@ struct StdNamingAdapt
|
|||
template <class D> inline StdNamingAdapt &operator = (const D &nValue) { rValue = nValue; return *this; }
|
||||
};
|
||||
template <class T>
|
||||
inline StdNamingAdapt<T> mkNamingAdapt(T RREF rValue, const char *szName) { return StdNamingAdapt<T>(rValue, szName); }
|
||||
inline StdNamingAdapt<T> mkNamingAdapt(T &&rValue, const char *szName) { return StdNamingAdapt<T>(rValue, szName); }
|
||||
|
||||
// * Naming Adaptor (defaulting)
|
||||
// Embeds a value into a named section, sets default on fail
|
||||
|
@ -127,7 +127,7 @@ struct StdNamingDefaultAdapt
|
|||
}
|
||||
};
|
||||
template <class T, class D>
|
||||
inline StdNamingDefaultAdapt<T,D> mkNamingAdapt(T RREF rValue, const char *szName, const D &rDefault, bool fPrefillDefault=false, bool fStoreDefault=false) { return StdNamingDefaultAdapt<T,D>(rValue, szName, rDefault, fPrefillDefault, fStoreDefault); }
|
||||
inline StdNamingDefaultAdapt<T,D> mkNamingAdapt(T &&rValue, const char *szName, const D &rDefault, bool fPrefillDefault=false, bool fStoreDefault=false) { return StdNamingDefaultAdapt<T,D>(rValue, szName, rDefault, fPrefillDefault, fStoreDefault); }
|
||||
|
||||
// * Decompiling Adaptor
|
||||
// Allows to use const objects if the compiler won't change the targets
|
||||
|
@ -170,7 +170,7 @@ struct StdRuntimeValueAdapt
|
|||
template <class D> inline StdRuntimeValueAdapt<T> &operator = (const D &nValue) { rValue = nValue; return *this; }
|
||||
};
|
||||
template <class T>
|
||||
inline StdRuntimeValueAdapt<T> mkRuntimeValueAdapt(T RREF rValue) { return StdRuntimeValueAdapt<T>(rValue); }
|
||||
inline StdRuntimeValueAdapt<T> mkRuntimeValueAdapt(T &&rValue) { return StdRuntimeValueAdapt<T>(rValue); }
|
||||
|
||||
// * String adaptor
|
||||
struct StdStringAdapt
|
||||
|
@ -432,7 +432,7 @@ struct StdInsertAdapt
|
|||
}
|
||||
};
|
||||
template <class T, class I>
|
||||
inline StdInsertAdapt<T, I> mkInsertAdapt(T RREF rObj, I RREF rIns, bool fBefore = true) { return StdInsertAdapt<T,I>(rObj, rIns, fBefore); }
|
||||
inline StdInsertAdapt<T, I> mkInsertAdapt(T &&rObj, I &&rIns, bool fBefore = true) { return StdInsertAdapt<T,I>(rObj, rIns, fBefore); }
|
||||
|
||||
// * Parameter Adaptor
|
||||
// Specify a second parameter for the CompileFunc
|
||||
|
@ -453,7 +453,7 @@ struct StdParameterAdapt
|
|||
inline T &GetObj() { return rObj; }
|
||||
};
|
||||
template <class T, class P>
|
||||
inline StdParameterAdapt<T, P> mkParAdapt(T RREF rObj, const P &rPar) { return StdParameterAdapt<T, P>(rObj, rPar); }
|
||||
inline StdParameterAdapt<T, P> mkParAdapt(T &&rObj, const P &rPar) { return StdParameterAdapt<T, P>(rObj, rPar); }
|
||||
|
||||
// for mkArrayAdaptMap
|
||||
template <class P>
|
||||
|
|
|
@ -55,7 +55,6 @@ public:
|
|||
else
|
||||
Ref(Buf2);
|
||||
}
|
||||
#ifdef HAVE_RVALUE_REF
|
||||
StdBuf(const StdBuf & Buf2, bool fCopy = true)
|
||||
: fRef(true), pData(NULL), iSize(0)
|
||||
{
|
||||
|
@ -64,7 +63,7 @@ public:
|
|||
else
|
||||
Ref(Buf2);
|
||||
}
|
||||
StdBuf(StdBuf RREF Buf2, bool fCopy = false)
|
||||
StdBuf(StdBuf &&Buf2, bool fCopy = false)
|
||||
: fRef(true), pData(NULL), iSize(0)
|
||||
{
|
||||
if (fCopy)
|
||||
|
@ -74,7 +73,6 @@ public:
|
|||
else
|
||||
Ref(Buf2);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Set by constant data. Copies data if desired.
|
||||
StdBuf(const void *pData, size_t iSize, bool fCopy = false)
|
||||
|
@ -289,12 +287,10 @@ public:
|
|||
{
|
||||
Take(Buf2.GrabPointer(), Buf2.getSize());
|
||||
}
|
||||
#ifdef HAVE_RVALUE_REF
|
||||
void Take(StdBuf RREF Buf2)
|
||||
void Take(StdBuf &&Buf2)
|
||||
{
|
||||
Take(Buf2.GrabPointer(), Buf2.getSize());
|
||||
}
|
||||
#endif
|
||||
|
||||
// * File support
|
||||
bool LoadFromFile(const char *szFile);
|
||||
|
@ -326,7 +322,7 @@ public:
|
|||
bool operator != (const StdBuf &Buf2) const { return ! operator == (Buf2); }
|
||||
|
||||
// Set (as constructor: take if possible)
|
||||
StdBuf &operator = (StdBuf RREF Buf2)
|
||||
StdBuf &operator = (StdBuf &&Buf2)
|
||||
{
|
||||
if (Buf2.isRef()) Ref(Buf2); else Take(std::move(Buf2));
|
||||
return *this;
|
||||
|
@ -378,14 +374,12 @@ public:
|
|||
StdCopyBuf(const StdCopyBuf &Buf2, bool fCopy = true)
|
||||
: StdBuf(Buf2.getRef(), fCopy)
|
||||
{ }
|
||||
#ifdef HAVE_RVALUE_REF
|
||||
StdCopyBuf(StdBuf RREF Buf2, bool fCopy = false)
|
||||
StdCopyBuf(StdBuf &&Buf2, bool fCopy = false)
|
||||
: StdBuf(std::move(Buf2), fCopy)
|
||||
{ }
|
||||
StdCopyBuf(StdCopyBuf RREF Buf2, bool fCopy = false)
|
||||
StdCopyBuf(StdCopyBuf &&Buf2, bool fCopy = false)
|
||||
: StdBuf(std::move(Buf2), fCopy)
|
||||
{ }
|
||||
#endif
|
||||
|
||||
// Set by constant data. Copies data by default.
|
||||
StdCopyBuf(const void *pData, size_t iSize, bool fCopy = true)
|
||||
|
@ -418,16 +412,14 @@ public:
|
|||
: StdBuf(Buf2, fCopy)
|
||||
{ }
|
||||
|
||||
#ifdef HAVE_RVALUE_REF
|
||||
// This constructor is important, because the compiler will create one
|
||||
// otherwise, despite having two other constructors to choose from
|
||||
StdStrBuf(const StdStrBuf & Buf2, bool fCopy = true)
|
||||
: StdBuf(Buf2, fCopy)
|
||||
{ }
|
||||
StdStrBuf(StdStrBuf RREF Buf2, bool fCopy = false)
|
||||
StdStrBuf(StdStrBuf &&Buf2, bool fCopy = false)
|
||||
: StdBuf(std::move(Buf2), fCopy)
|
||||
{ }
|
||||
#endif
|
||||
|
||||
// Set by constant data. References data by default, copies if specified.
|
||||
explicit StdStrBuf(const char *pData, bool fCopy = false)
|
||||
|
@ -482,9 +474,7 @@ public:
|
|||
void Ref(const StdStrBuf &Buf2) { StdBuf::Ref(Buf2.getData(), Buf2.getSize()); }
|
||||
StdStrBuf getRef() const { return StdStrBuf(getData(), getLength()); }
|
||||
void Take(StdStrBuf & Buf2) { StdBuf::Take(Buf2); }
|
||||
#ifdef HAVE_RVALUE_REF
|
||||
void Take(StdStrBuf RREF Buf2) { StdBuf::Take(std::move(Buf2)); }
|
||||
#endif
|
||||
void Take(StdStrBuf &&Buf2) { StdBuf::Take(std::move(Buf2)); }
|
||||
|
||||
void Clear() { StdBuf::Clear(); }
|
||||
void Copy() { StdBuf::Copy(); }
|
||||
|
@ -706,14 +696,12 @@ public:
|
|||
StdCopyStrBuf(const StdCopyStrBuf &Buf2, bool fCopy = true)
|
||||
: StdStrBuf(Buf2.getRef(), fCopy)
|
||||
{ }
|
||||
#ifdef HAVE_RVALUE_REF
|
||||
StdCopyStrBuf(StdStrBuf RREF Buf2, bool fCopy = false)
|
||||
StdCopyStrBuf(StdStrBuf &&Buf2, bool fCopy = false)
|
||||
: StdStrBuf(std::move(Buf2), fCopy)
|
||||
{ }
|
||||
StdCopyStrBuf(StdCopyStrBuf RREF Buf2, bool fCopy = false)
|
||||
StdCopyStrBuf(StdCopyStrBuf &&Buf2, bool fCopy = false)
|
||||
: StdStrBuf(std::move(Buf2), fCopy)
|
||||
{ }
|
||||
#endif
|
||||
|
||||
// Set by constant data. Copies data if desired.
|
||||
explicit StdCopyStrBuf(const char *pData, bool fCopy = true)
|
||||
|
|
|
@ -179,7 +179,7 @@ public:
|
|||
void Value(bool &rBool) { Boolean(rBool); }
|
||||
|
||||
// Compiling/Decompiling (may throw a data format exception!)
|
||||
template <class T> inline void Compile(T RREF rStruct)
|
||||
template <class T> inline void Compile(T &&rStruct)
|
||||
{
|
||||
assert(isCompiler());
|
||||
DoCompilation(rStruct);
|
||||
|
@ -379,7 +379,7 @@ void CompileNewFuncCtx(T *&pStruct, StdCompiler *pComp, const ContextT& rCtx, co
|
|||
|
||||
// Helpers for buffer-based compiling (may throw a data format exception!)
|
||||
template <class CompT, class StructT>
|
||||
void CompileFromBuf(StructT RREF TargetStruct, const typename CompT::InT &SrcBuf)
|
||||
void CompileFromBuf(StructT &&TargetStruct, const typename CompT::InT &SrcBuf)
|
||||
{
|
||||
CompT Compiler;
|
||||
Compiler.setInput(SrcBuf.getRef());
|
||||
|
@ -490,7 +490,7 @@ public:
|
|||
|
||||
// Input
|
||||
typedef StdBuf InT;
|
||||
void setInput(InT RREF In) { Buf = std::move(In); }
|
||||
void setInput(InT &&In) { Buf = std::move(In); }
|
||||
|
||||
// Properties
|
||||
virtual bool isCompiler() { return true; }
|
||||
|
@ -734,7 +734,7 @@ private:
|
|||
void StdCompilerWarnCallback(void *pData, const char *szPosition, const char *szError);
|
||||
|
||||
template <class CompT, class StructT>
|
||||
bool CompileFromBuf_Log(StructT RREF TargetStruct, const typename CompT::InT &SrcBuf, const char *szName)
|
||||
bool CompileFromBuf_Log(StructT &&TargetStruct, const typename CompT::InT &SrcBuf, const char *szName)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
@ -752,7 +752,7 @@ bool CompileFromBuf_Log(StructT RREF TargetStruct, const typename CompT::InT &Sr
|
|||
}
|
||||
}
|
||||
template <class CompT, class StructT>
|
||||
bool CompileFromBuf_LogWarn(StructT RREF TargetStruct, const typename CompT::InT &SrcBuf, const char *szName)
|
||||
bool CompileFromBuf_LogWarn(StructT &&TargetStruct, const typename CompT::InT &SrcBuf, const char *szName)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
@ -773,7 +773,7 @@ bool CompileFromBuf_LogWarn(StructT RREF TargetStruct, const typename CompT::InT
|
|||
}
|
||||
}
|
||||
template <class CompT, class StructT>
|
||||
bool DecompileToBuf_Log(StructT RREF TargetStruct, typename CompT::OutT *pOut, const char *szName)
|
||||
bool DecompileToBuf_Log(StructT &&TargetStruct, typename CompT::OutT *pOut, const char *szName)
|
||||
{
|
||||
if (!pOut) return false;
|
||||
try
|
||||
|
|
|
@ -645,7 +645,7 @@ StdMeshMaterialShaderParameter::StdMeshMaterialShaderParameter(const StdMeshMate
|
|||
CopyDeep(other);
|
||||
}
|
||||
|
||||
StdMeshMaterialShaderParameter::StdMeshMaterialShaderParameter(StdMeshMaterialShaderParameter RREF other)
|
||||
StdMeshMaterialShaderParameter::StdMeshMaterialShaderParameter(StdMeshMaterialShaderParameter &&other)
|
||||
{
|
||||
Move(std::move(other));
|
||||
}
|
||||
|
@ -667,7 +667,7 @@ StdMeshMaterialShaderParameter& StdMeshMaterialShaderParameter::operator=(const
|
|||
return *this;
|
||||
}
|
||||
|
||||
StdMeshMaterialShaderParameter& StdMeshMaterialShaderParameter::operator=(StdMeshMaterialShaderParameter RREF other)
|
||||
StdMeshMaterialShaderParameter& StdMeshMaterialShaderParameter::operator=(StdMeshMaterialShaderParameter &&other)
|
||||
{
|
||||
if(this == &other) return *this;
|
||||
|
||||
|
@ -726,7 +726,7 @@ void StdMeshMaterialShaderParameter::CopyDeep(const StdMeshMaterialShaderParamet
|
|||
}
|
||||
}
|
||||
|
||||
void StdMeshMaterialShaderParameter::Move(StdMeshMaterialShaderParameter RREF other)
|
||||
void StdMeshMaterialShaderParameter::Move(StdMeshMaterialShaderParameter &&other)
|
||||
{
|
||||
CopyShallow(other);
|
||||
other.type = FLOAT;
|
||||
|
|
|
@ -63,11 +63,11 @@ public:
|
|||
StdMeshMaterialShaderParameter(); // type=FLOAT, value uninitialized
|
||||
StdMeshMaterialShaderParameter(Type type); // value uninitialized
|
||||
StdMeshMaterialShaderParameter(const StdMeshMaterialShaderParameter& other);
|
||||
StdMeshMaterialShaderParameter(StdMeshMaterialShaderParameter RREF other);
|
||||
StdMeshMaterialShaderParameter(StdMeshMaterialShaderParameter &&other);
|
||||
~StdMeshMaterialShaderParameter();
|
||||
|
||||
StdMeshMaterialShaderParameter& operator=(const StdMeshMaterialShaderParameter& other);
|
||||
StdMeshMaterialShaderParameter& operator=(StdMeshMaterialShaderParameter RREF other);
|
||||
StdMeshMaterialShaderParameter& operator=(StdMeshMaterialShaderParameter &&other);
|
||||
|
||||
Type GetType() const { return type; }
|
||||
void SetType(Type type); // changes type, new value is uninitialized
|
||||
|
@ -88,7 +88,7 @@ public:
|
|||
private:
|
||||
void CopyShallow(const StdMeshMaterialShaderParameter& other);
|
||||
void CopyDeep(const StdMeshMaterialShaderParameter& other);
|
||||
void Move(StdMeshMaterialShaderParameter RREF other);
|
||||
void Move(StdMeshMaterialShaderParameter &&other);
|
||||
|
||||
Type type;
|
||||
|
||||
|
|
|
@ -2258,7 +2258,7 @@ C4NetIOUDP::Packet::Packet()
|
|||
|
||||
}
|
||||
|
||||
C4NetIOUDP::Packet::Packet(C4NetIOPacket RREF rnData, nr_t inNr)
|
||||
C4NetIOUDP::Packet::Packet(C4NetIOPacket &&rnData, nr_t inNr)
|
||||
: iNr(inNr),
|
||||
Data(rnData),
|
||||
pFragmentGot(NULL)
|
||||
|
@ -2867,7 +2867,7 @@ bool C4NetIOUDP::Peer::SendDirect(const Packet &rPacket, unsigned int iNr)
|
|||
return fSuccess;
|
||||
}
|
||||
|
||||
bool C4NetIOUDP::Peer::SendDirect(C4NetIOPacket RREF rPacket) // (mt-safe)
|
||||
bool C4NetIOUDP::Peer::SendDirect(C4NetIOPacket &&rPacket) // (mt-safe)
|
||||
{
|
||||
// insert correct addr
|
||||
if (!(rPacket.getStatus() & 0x80)) rPacket.SetAddr(addr);
|
||||
|
@ -2996,7 +2996,7 @@ bool C4NetIOUDP::BroadcastDirect(const Packet &rPacket, unsigned int iNr) // (mt
|
|||
return fSuccess;
|
||||
}
|
||||
|
||||
bool C4NetIOUDP::SendDirect(C4NetIOPacket RREF rPacket) // (mt-safe)
|
||||
bool C4NetIOUDP::SendDirect(C4NetIOPacket &&rPacket) // (mt-safe)
|
||||
{
|
||||
addr_t toaddr = rPacket.getAddr();
|
||||
// packet meant to be broadcasted?
|
||||
|
|
|
@ -507,7 +507,7 @@ protected:
|
|||
|
||||
// construction / destruction
|
||||
Packet();
|
||||
Packet(C4NetIOPacket RREF rnData, nr_t inNr);
|
||||
Packet(C4NetIOPacket &&rnData, nr_t inNr);
|
||||
~Packet();
|
||||
|
||||
protected:
|
||||
|
@ -681,7 +681,7 @@ protected:
|
|||
|
||||
// sending
|
||||
bool SendDirect(const Packet &rPacket, unsigned int iNr = ~0);
|
||||
bool SendDirect(C4NetIOPacket RREF rPacket);
|
||||
bool SendDirect(C4NetIOPacket &&rPacket);
|
||||
|
||||
// events
|
||||
void OnConn();
|
||||
|
@ -739,7 +739,7 @@ protected:
|
|||
|
||||
// sending
|
||||
bool BroadcastDirect(const Packet &rPacket, unsigned int iNr = ~0u); // (mt-safe)
|
||||
bool SendDirect(C4NetIOPacket RREF rPacket); // (mt-safe)
|
||||
bool SendDirect(C4NetIOPacket &&rPacket); // (mt-safe)
|
||||
|
||||
// multicast related
|
||||
bool DoLoopbackTest();
|
||||
|
|
|
@ -537,7 +537,7 @@ bool C4Network2ClientList::SendMsgToHost(C4NetIOPacket rPkt)
|
|||
return pHost->SendMsg(rPkt);
|
||||
}
|
||||
|
||||
bool C4Network2ClientList::SendMsgToClient(int32_t iClient, C4NetIOPacket RREF rPkt)
|
||||
bool C4Network2ClientList::SendMsgToClient(int32_t iClient, C4NetIOPacket &&rPkt)
|
||||
{
|
||||
// find client
|
||||
C4Network2Client *pClient = GetClientByID(iClient);
|
||||
|
|
|
@ -203,7 +203,7 @@ public:
|
|||
bool BroadcastMsgToConnClients(const C4NetIOPacket &rPkt);
|
||||
bool BroadcastMsgToClients(const C4NetIOPacket &rPkt);
|
||||
bool SendMsgToHost(C4NetIOPacket rPkt);
|
||||
bool SendMsgToClient(int32_t iClient, C4NetIOPacket RREF rPkt);
|
||||
bool SendMsgToClient(int32_t iClient, C4NetIOPacket &&rPkt);
|
||||
|
||||
// packet handling
|
||||
void HandlePacket(char cStatus, const C4PacketBase *pBasePkt, C4Network2IOConnection *pConn);
|
||||
|
|
|
@ -118,15 +118,6 @@ typedef ptrdiff_t ssize_t;
|
|||
|
||||
|
||||
|
||||
#ifdef HAVE_RVALUE_REF
|
||||
# define RREF &&
|
||||
#else
|
||||
# define RREF &
|
||||
namespace std { template<typename T> inline T &move (T &t) { return t; } }
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#if defined(_DEBUG) && defined(_MSC_VER)
|
||||
// use inline assembler to invoke the "breakpoint exception"
|
||||
# define BREAKPOINT_HERE __debugbreak()
|
||||
|
|
|
@ -48,11 +48,9 @@ public:
|
|||
C4Property(const C4Property &o) : Key(o.Key), Value(o.Value) { if (Key) Key->IncRef(); }
|
||||
C4Property & operator = (const C4Property &o)
|
||||
{ if(o.Key) o.Key->IncRef(); if (Key) Key->DecRef(); Key = o.Key; Value = o.Value; return *this; }
|
||||
#ifdef HAVE_RVALUE_REF
|
||||
C4Property(C4Property && o) : Key(o.Key), Value(std::move(o.Value)) { o.Key = 0; }
|
||||
C4Property & operator = (C4Property && o)
|
||||
{ if (Key) Key->DecRef(); Key = o.Key; o.Key = 0; Value = std::move(o.Value); return *this; }
|
||||
#endif
|
||||
~C4Property() { if (Key) Key->DecRef(); }
|
||||
void CompileFunc(StdCompiler *pComp, C4ValueNumbers *);
|
||||
C4String * Key;
|
||||
|
|
|
@ -50,11 +50,10 @@ public:
|
|||
C4RefCntPointer(T* p): p(p) { IncRef(); }
|
||||
C4RefCntPointer(): p(0) { }
|
||||
template <class U> C4RefCntPointer(const C4RefCntPointer<U> & r): p(r.p) { IncRef(); }
|
||||
#ifdef HAVE_RVALUE_REF
|
||||
// Move constructor
|
||||
template <class U> C4RefCntPointer(C4RefCntPointer<U> RREF r): p(r.p) { r.p = 0; }
|
||||
template <class U> C4RefCntPointer(C4RefCntPointer<U> &&r): p(r.p) { r.p = 0; }
|
||||
// Move assignment
|
||||
template <class U> C4RefCntPointer& operator = (C4RefCntPointer<U> RREF r)
|
||||
template <class U> C4RefCntPointer& operator = (C4RefCntPointer<U> &&r)
|
||||
{
|
||||
if (p != r.p)
|
||||
{
|
||||
|
@ -64,7 +63,6 @@ public:
|
|||
}
|
||||
return *this;
|
||||
}
|
||||
#endif
|
||||
~C4RefCntPointer() { DecRef(); }
|
||||
template <class U> C4RefCntPointer& operator = (U* new_p)
|
||||
{
|
||||
|
@ -113,14 +111,12 @@ template<typename T> class C4Set
|
|||
*p = e;
|
||||
return p;
|
||||
}
|
||||
#ifdef HAVE_RVALUE_REF
|
||||
T * AddInternal(T && e)
|
||||
{
|
||||
T * p = GetPlaceFor(e);
|
||||
*p = std::move(e);
|
||||
return p;
|
||||
}
|
||||
#endif
|
||||
void MaintainCapacity()
|
||||
{
|
||||
if (Capacity - Size < Max(2u, Capacity / 4))
|
||||
|
@ -198,7 +194,6 @@ public:
|
|||
++Size;
|
||||
return r;
|
||||
}
|
||||
#ifdef HAVE_RVALUE_REF
|
||||
T * Add(T && e)
|
||||
{
|
||||
MaintainCapacity();
|
||||
|
@ -206,7 +201,6 @@ public:
|
|||
++Size;
|
||||
return r;
|
||||
}
|
||||
#endif
|
||||
template<typename H> void Remove(H e)
|
||||
{
|
||||
unsigned int h = Hash(e);
|
||||
|
|
Loading…
Reference in New Issue