fix(Core): C++ 11 rule of 3 compiant constructors (#3023)
This commit is contained in:
Vendored
+30
-25
@@ -1,8 +1,8 @@
|
|||||||
/**
|
/**
|
||||||
@file Vector3.h
|
@file Vector3.h
|
||||||
|
|
||||||
3D vector class
|
3D vector class
|
||||||
|
|
||||||
@maintainer Morgan McGuire, http://graphics.cs.williams.edu
|
@maintainer Morgan McGuire, http://graphics.cs.williams.edu
|
||||||
|
|
||||||
@created 2001-06-02
|
@created 2001-06-02
|
||||||
@@ -36,7 +36,7 @@ class Any;
|
|||||||
/**
|
/**
|
||||||
<B>Swizzles</B>
|
<B>Swizzles</B>
|
||||||
Vector classes have swizzle operators, e.g. <CODE>v.xy()</CODE>, that
|
Vector classes have swizzle operators, e.g. <CODE>v.xy()</CODE>, that
|
||||||
allow selection of arbitrary sub-fields. These cannot be used as write
|
allow selection of arbitrary sub-fields. These cannot be used as write
|
||||||
masks. Examples
|
masks. Examples
|
||||||
|
|
||||||
<PRE>
|
<PRE>
|
||||||
@@ -74,7 +74,7 @@ public:
|
|||||||
|
|
||||||
/** \param any Must either Vector3(#, #, #) or Vector3 {x = #, y = #, z = #}*/
|
/** \param any Must either Vector3(#, #, #) or Vector3 {x = #, y = #, z = #}*/
|
||||||
Vector3(const Any& any);
|
Vector3(const Any& any);
|
||||||
|
|
||||||
/** Converts the Vector3 to an Any. */
|
/** Converts the Vector3 to an Any. */
|
||||||
operator Any() const;
|
operator Any() const;
|
||||||
|
|
||||||
@@ -116,6 +116,11 @@ public:
|
|||||||
|
|
||||||
// assignment and comparison
|
// assignment and comparison
|
||||||
Vector3& __fastcall operator= (const Vector3& rkVector);
|
Vector3& __fastcall operator= (const Vector3& rkVector);
|
||||||
|
/* requried as of C++ 11 */
|
||||||
|
#if __cplusplus >= 201103L
|
||||||
|
Vector3(const Vector3&) = default;
|
||||||
|
Vector3(Vector3&&) = default;
|
||||||
|
#endif
|
||||||
bool operator== (const Vector3& rkVector) const;
|
bool operator== (const Vector3& rkVector) const;
|
||||||
bool operator!= (const Vector3& rkVector) const;
|
bool operator!= (const Vector3& rkVector) const;
|
||||||
size_t hashCode() const;
|
size_t hashCode() const;
|
||||||
@@ -130,7 +135,7 @@ public:
|
|||||||
|
|
||||||
/** Returns true if this vector has length ~= 1 */
|
/** Returns true if this vector has length ~= 1 */
|
||||||
bool isUnit() const;
|
bool isUnit() const;
|
||||||
|
|
||||||
// arithmetic operations
|
// arithmetic operations
|
||||||
Vector3 __fastcall operator+ (const Vector3& v) const;
|
Vector3 __fastcall operator+ (const Vector3& v) const;
|
||||||
Vector3 __fastcall operator- (const Vector3& v) const;
|
Vector3 __fastcall operator- (const Vector3& v) const;
|
||||||
@@ -156,7 +161,7 @@ public:
|
|||||||
float length() const;
|
float length() const;
|
||||||
|
|
||||||
float magnitude() const;
|
float magnitude() const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
The result is a nan vector if the length is almost zero.
|
The result is a nan vector if the length is almost zero.
|
||||||
*/
|
*/
|
||||||
@@ -179,7 +184,7 @@ public:
|
|||||||
|
|
||||||
<PRE>
|
<PRE>
|
||||||
V' N V
|
V' N V
|
||||||
|
|
||||||
r ^ -,
|
r ^ -,
|
||||||
\ | /
|
\ | /
|
||||||
\|/
|
\|/
|
||||||
@@ -191,17 +196,17 @@ public:
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
See also G3D::Ray::reflect.
|
See also G3D::Ray::reflect.
|
||||||
The length is 1.
|
The length is 1.
|
||||||
<PRE>
|
<PRE>
|
||||||
V' N V
|
V' N V
|
||||||
|
|
||||||
r ^ /
|
r ^ /
|
||||||
\ | /
|
\ | /
|
||||||
\|'-
|
\|'-
|
||||||
</PRE>
|
</PRE>
|
||||||
*/
|
*/
|
||||||
Vector3 reflectionDirection(const Vector3& normal) const;
|
Vector3 reflectionDirection(const Vector3& normal) const;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Returns Vector3::zero() if the length is nearly zero, otherwise
|
Returns Vector3::zero() if the length is nearly zero, otherwise
|
||||||
@@ -223,7 +228,7 @@ public:
|
|||||||
where iExit is the index of refraction for the
|
where iExit is the index of refraction for the
|
||||||
previous material and iEnter is the index of refraction
|
previous material and iEnter is the index of refraction
|
||||||
for the new material. Like Vector3::reflectionDirection,
|
for the new material. Like Vector3::reflectionDirection,
|
||||||
the result has length 1 and is
|
the result has length 1 and is
|
||||||
pointed <I>away</I> from the intersection.
|
pointed <I>away</I> from the intersection.
|
||||||
|
|
||||||
Returns Vector3::zero() in the case of total internal refraction.
|
Returns Vector3::zero() in the case of total internal refraction.
|
||||||
@@ -237,7 +242,7 @@ public:
|
|||||||
See also G3D::Ray::refract.
|
See also G3D::Ray::refract.
|
||||||
<PRE>
|
<PRE>
|
||||||
N V
|
N V
|
||||||
|
|
||||||
^ /
|
^ /
|
||||||
| /
|
| /
|
||||||
|'-
|
|'-
|
||||||
@@ -265,9 +270,9 @@ public:
|
|||||||
float squaredLength() const;
|
float squaredLength() const;
|
||||||
|
|
||||||
float squaredMagnitude () const;
|
float squaredMagnitude () const;
|
||||||
|
|
||||||
float __fastcall dot(const Vector3& rkVector) const;
|
float __fastcall dot(const Vector3& rkVector) const;
|
||||||
|
|
||||||
float unitize(float tolerance = 1e-06);
|
float unitize(float tolerance = 1e-06);
|
||||||
|
|
||||||
/** Cross product. Note that two cross products in a row
|
/** Cross product. Note that two cross products in a row
|
||||||
@@ -319,14 +324,14 @@ public:
|
|||||||
Linear interpolation
|
Linear interpolation
|
||||||
*/
|
*/
|
||||||
inline Vector3 lerp(const Vector3& v, float alpha) const {
|
inline Vector3 lerp(const Vector3& v, float alpha) const {
|
||||||
return (*this) + (v - *this) * alpha;
|
return (*this) + (v - *this) * alpha;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Gram-Schmidt orthonormalization. */
|
/** Gram-Schmidt orthonormalization. */
|
||||||
static void orthonormalize (Vector3 akVector[3]);
|
static void orthonormalize (Vector3 akVector[3]);
|
||||||
|
|
||||||
/** \brief Random unit vector, uniformly distributed on the sphere.
|
/** \brief Random unit vector, uniformly distributed on the sphere.
|
||||||
|
|
||||||
Distribution rendered by G3D::DirectionHistogram:
|
Distribution rendered by G3D::DirectionHistogram:
|
||||||
\image html vector3-random.png
|
\image html vector3-random.png
|
||||||
*/
|
*/
|
||||||
@@ -334,8 +339,8 @@ public:
|
|||||||
|
|
||||||
/** \brief Random unit vector, distributed according to \f$\max(\cos \theta,0)\f$.
|
/** \brief Random unit vector, distributed according to \f$\max(\cos \theta,0)\f$.
|
||||||
|
|
||||||
That is, so that the probability of \f$\vec{V}\f$ is proportional
|
That is, so that the probability of \f$\vec{V}\f$ is proportional
|
||||||
to \f$\max(\vec{v} \cdot \vec{n}, 0)\f$. Useful in photon mapping for
|
to \f$\max(\vec{v} \cdot \vec{n}, 0)\f$. Useful in photon mapping for
|
||||||
Lambertian scattering.
|
Lambertian scattering.
|
||||||
|
|
||||||
Distribution rendered by G3D::DirectionHistogram:
|
Distribution rendered by G3D::DirectionHistogram:
|
||||||
@@ -372,7 +377,7 @@ public:
|
|||||||
|
|
||||||
/** Input W must be initialize to a nonzero vector, output is {U,V,W}
|
/** Input W must be initialize to a nonzero vector, output is {U,V,W}
|
||||||
an orthonormal basis. A hint is provided about whether or not W
|
an orthonormal basis. A hint is provided about whether or not W
|
||||||
is already unit length.
|
is already unit length.
|
||||||
@deprecated Use getTangents
|
@deprecated Use getTangents
|
||||||
*/
|
*/
|
||||||
static void generateOrthonormalBasis (Vector3& rkU, Vector3& rkV,
|
static void generateOrthonormalBasis (Vector3& rkU, Vector3& rkV,
|
||||||
@@ -394,7 +399,7 @@ public:
|
|||||||
static const Vector3& unitZ();
|
static const Vector3& unitZ();
|
||||||
static const Vector3& inf();
|
static const Vector3& inf();
|
||||||
static const Vector3& nan();
|
static const Vector3& nan();
|
||||||
|
|
||||||
/** Smallest (most negative) representable vector */
|
/** Smallest (most negative) representable vector */
|
||||||
static const Vector3& minFinite();
|
static const Vector3& minFinite();
|
||||||
|
|
||||||
@@ -405,16 +410,16 @@ public:
|
|||||||
/** Creates two orthonormal tangent vectors X and Y such that
|
/** Creates two orthonormal tangent vectors X and Y such that
|
||||||
if Z = this, X x Y = Z.*/
|
if Z = this, X x Y = Z.*/
|
||||||
inline void getTangents(Vector3& X, Vector3& Y) const {
|
inline void getTangents(Vector3& X, Vector3& Y) const {
|
||||||
debugAssertM(G3D::fuzzyEq(length(), 1.0f),
|
debugAssertM(G3D::fuzzyEq(length(), 1.0f),
|
||||||
"makeAxes requires Z to have unit length");
|
"makeAxes requires Z to have unit length");
|
||||||
|
|
||||||
// Choose another vector not perpendicular
|
// Choose another vector not perpendicular
|
||||||
X = (abs(x) < 0.9f) ? Vector3::unitX() : Vector3::unitY();
|
X = (abs(x) < 0.9f) ? Vector3::unitX() : Vector3::unitY();
|
||||||
|
|
||||||
// Remove the part that is parallel to Z
|
// Remove the part that is parallel to Z
|
||||||
X -= *this * this->dot(X);
|
X -= *this * this->dot(X);
|
||||||
X /= X.length();
|
X /= X.length();
|
||||||
|
|
||||||
Y = this->cross(X);
|
Y = this->cross(X);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -72,6 +72,12 @@ class ByteBuffer
|
|||||||
_storage(buf._storage)
|
_storage(buf._storage)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
/* requried as of C++ 11 */
|
||||||
|
#if __cplusplus >= 201103L
|
||||||
|
ByteBuffer(ByteBuffer&&) = default;
|
||||||
|
ByteBuffer& operator=(const ByteBuffer&) = default;
|
||||||
|
ByteBuffer& operator=(ByteBuffer&&) = default;
|
||||||
|
#endif
|
||||||
|
|
||||||
void clear()
|
void clear()
|
||||||
{
|
{
|
||||||
@@ -374,18 +380,18 @@ class ByteBuffer
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8 * contents()
|
uint8 * contents()
|
||||||
{
|
{
|
||||||
if (_storage.empty())
|
if (_storage.empty())
|
||||||
throw ByteBufferException();
|
throw ByteBufferException();
|
||||||
return &_storage[0];
|
return &_storage[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
const uint8 *contents() const
|
const uint8 *contents() const
|
||||||
{
|
{
|
||||||
if (_storage.empty())
|
if (_storage.empty())
|
||||||
throw ByteBufferException();
|
throw ByteBufferException();
|
||||||
return &_storage[0];
|
return &_storage[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t size() const { return _storage.size(); }
|
size_t size() const { return _storage.size(); }
|
||||||
@@ -612,4 +618,3 @@ inline void ByteBuffer::read_skip<std::string>()
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -22,6 +22,12 @@ class WorldPacket : public ByteBuffer
|
|||||||
WorldPacket(const WorldPacket &packet) : ByteBuffer(packet), m_opcode(packet.m_opcode)
|
WorldPacket(const WorldPacket &packet) : ByteBuffer(packet), m_opcode(packet.m_opcode)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
/* requried as of C++ 11 */
|
||||||
|
#if __cplusplus >= 201103L
|
||||||
|
WorldPacket(WorldPacket&&) = default;
|
||||||
|
WorldPacket& operator=(const WorldPacket&) = default;
|
||||||
|
WorldPacket& operator=(WorldPacket&&) = default;
|
||||||
|
#endif
|
||||||
|
|
||||||
void Initialize(uint16 opcode, size_t newres=200)
|
void Initialize(uint16 opcode, size_t newres=200)
|
||||||
{
|
{
|
||||||
@@ -37,4 +43,3 @@ class WorldPacket : public ByteBuffer
|
|||||||
uint16 m_opcode;
|
uint16 m_opcode;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -449,6 +449,11 @@ public:
|
|||||||
part[2] = right.part[2];
|
part[2] = right.part[2];
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
/* requried as of C++ 11 */
|
||||||
|
#if __cplusplus >= 201103L
|
||||||
|
flag96(const flag96&) = default;
|
||||||
|
flag96(flag96&&) = default;
|
||||||
|
#endif
|
||||||
|
|
||||||
inline flag96 operator&(flag96 const& right) const
|
inline flag96 operator&(flag96 const& right) const
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -376,6 +376,12 @@ struct Position
|
|||||||
: m_positionX(x), m_positionY(y), m_positionZ(z), m_orientation(NormalizeOrientation(o)) { }
|
: m_positionX(x), m_positionY(y), m_positionZ(z), m_orientation(NormalizeOrientation(o)) { }
|
||||||
|
|
||||||
Position(Position const& loc) { Relocate(loc); }
|
Position(Position const& loc) { Relocate(loc); }
|
||||||
|
/* requried as of C++ 11 */
|
||||||
|
#if __cplusplus >= 201103L
|
||||||
|
Position(Position&&) = default;
|
||||||
|
Position& operator=(const Position&) = default;
|
||||||
|
Position& operator=(Position&&) = default;
|
||||||
|
#endif
|
||||||
|
|
||||||
struct PositionXYStreamer
|
struct PositionXYStreamer
|
||||||
{
|
{
|
||||||
@@ -639,7 +645,13 @@ class WorldLocation : public Position
|
|||||||
public:
|
public:
|
||||||
explicit WorldLocation(uint32 _mapid = MAPID_INVALID, float _x = 0, float _y = 0, float _z = 0, float _o = 0)
|
explicit WorldLocation(uint32 _mapid = MAPID_INVALID, float _x = 0, float _y = 0, float _z = 0, float _o = 0)
|
||||||
: m_mapId(_mapid) { Relocate(_x, _y, _z, _o); }
|
: m_mapId(_mapid) { Relocate(_x, _y, _z, _o); }
|
||||||
WorldLocation(const WorldLocation &loc) { WorldRelocate(loc); }
|
WorldLocation(const WorldLocation &loc) : Position () { WorldRelocate(loc); }
|
||||||
|
/* requried as of C++ 11 */
|
||||||
|
#if __cplusplus >= 201103L
|
||||||
|
WorldLocation(WorldLocation&&) = default;
|
||||||
|
WorldLocation& operator=(const WorldLocation&) = default;
|
||||||
|
WorldLocation& operator=(WorldLocation&&) = default;
|
||||||
|
#endif
|
||||||
|
|
||||||
void WorldRelocate(const WorldLocation &loc)
|
void WorldRelocate(const WorldLocation &loc)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -657,7 +657,7 @@ enum NPCFlags
|
|||||||
UNIT_NPC_FLAG_GUILD_BANKER = 0x00800000, // cause client to send 997 opcode
|
UNIT_NPC_FLAG_GUILD_BANKER = 0x00800000, // cause client to send 997 opcode
|
||||||
UNIT_NPC_FLAG_SPELLCLICK = 0x01000000, // cause client to send 1015 opcode (spell click)
|
UNIT_NPC_FLAG_SPELLCLICK = 0x01000000, // cause client to send 1015 opcode (spell click)
|
||||||
UNIT_NPC_FLAG_PLAYER_VEHICLE = 0x02000000, // players with mounts that have vehicle data should have it set
|
UNIT_NPC_FLAG_PLAYER_VEHICLE = 0x02000000, // players with mounts that have vehicle data should have it set
|
||||||
UNIT_NPC_FLAG_MAILBOX = 0x04000000 //
|
UNIT_NPC_FLAG_MAILBOX = 0x04000000 //
|
||||||
};
|
};
|
||||||
|
|
||||||
enum MovementFlags
|
enum MovementFlags
|
||||||
@@ -1314,6 +1314,12 @@ public:
|
|||||||
_posOwner.Relocate(c._posOwner);
|
_posOwner.Relocate(c._posOwner);
|
||||||
_posTarget.Relocate(c._posTarget);
|
_posTarget.Relocate(c._posTarget);
|
||||||
}
|
}
|
||||||
|
/* requried as of C++ 11 */
|
||||||
|
#if __cplusplus >= 201103L
|
||||||
|
MMapTargetData(MMapTargetData&&) = default;
|
||||||
|
MMapTargetData& operator=(const MMapTargetData&) = default;
|
||||||
|
MMapTargetData& operator=(MMapTargetData&&) = default;
|
||||||
|
#endif
|
||||||
bool PosChanged(const Position& o, const Position& t) const
|
bool PosChanged(const Position& o, const Position& t) const
|
||||||
{
|
{
|
||||||
return _posOwner.GetExactDistSq(&o) > 0.5f*0.5f || _posTarget.GetExactDistSq(&t) > 0.5f*0.5f;
|
return _posOwner.GetExactDistSq(&o) > 0.5f*0.5f || _posTarget.GetExactDistSq(&t) > 0.5f*0.5f;
|
||||||
|
|||||||
@@ -68,6 +68,12 @@ namespace Movement
|
|||||||
MoveSplineFlag() { raw() = 0; }
|
MoveSplineFlag() { raw() = 0; }
|
||||||
MoveSplineFlag(uint32 f) { raw() = f; }
|
MoveSplineFlag(uint32 f) { raw() = f; }
|
||||||
MoveSplineFlag(const MoveSplineFlag& f) { raw() = f.raw(); }
|
MoveSplineFlag(const MoveSplineFlag& f) { raw() = f.raw(); }
|
||||||
|
/* requried as of C++ 11 */
|
||||||
|
#if __cplusplus >= 201103L
|
||||||
|
MoveSplineFlag(MoveSplineFlag&&) = default;
|
||||||
|
MoveSplineFlag& operator=(const MoveSplineFlag&) = default;
|
||||||
|
MoveSplineFlag& operator=(MoveSplineFlag&&) = default;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Constant interface
|
// Constant interface
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user