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
Nicolas Hake 2015-09-20 13:26:43 +02:00
parent d1313f622f
commit 6a11e3e811
16 changed files with 39 additions and 72 deletions

View File

@ -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)

View File

@ -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

View File

@ -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
};

View File

@ -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

View File

@ -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>

View File

@ -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)

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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?

View File

@ -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();

View File

@ -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);

View File

@ -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);

View File

@ -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()

View File

@ -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;

View File

@ -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);