Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -734,9 +734,7 @@ public:
|
||||
}
|
||||
else
|
||||
{
|
||||
Array tmp = MoveTemp(other);
|
||||
other = *this;
|
||||
*this = MoveTemp(tmp);
|
||||
::Swap(other, *this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -55,9 +55,7 @@ public:
|
||||
for (int32 i = 0; i < obj.Count(); i++)
|
||||
{
|
||||
if (predicate(obj[i]))
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return INVALID_INDEX;
|
||||
}
|
||||
@@ -74,9 +72,7 @@ public:
|
||||
for (int32 i = 0; i < obj.Count(); i++)
|
||||
{
|
||||
if (predicate(obj[i]))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -93,13 +89,101 @@ public:
|
||||
for (int32 i = 0; i < obj.Count(); i++)
|
||||
{
|
||||
if (!predicate(obj[i]))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Filters a sequence of values based on a predicate.
|
||||
/// </summary>
|
||||
/// <param name="obj">The target collection.</param>
|
||||
/// <param name="predicate">The prediction function. Return true for elements that should be included in result list.</param>
|
||||
/// <param name="result">The result list with items that passed the predicate.</param>
|
||||
template<typename T, typename AllocationType>
|
||||
static void Where(const Array<T, AllocationType>& obj, const Function<bool(const T&)>& predicate, Array<T, AllocationType>& result)
|
||||
{
|
||||
for (const T& i : obj)
|
||||
{
|
||||
if (predicate(i))
|
||||
result.Add(i);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Filters a sequence of values based on a predicate.
|
||||
/// </summary>
|
||||
/// <param name="obj">The target collection.</param>
|
||||
/// <param name="predicate">The prediction function. Return true for elements that should be included in result list.</param>
|
||||
/// <returns>The result list with items that passed the predicate.</returns>
|
||||
template<typename T, typename AllocationType>
|
||||
static Array<T, AllocationType> Where(const Array<T, AllocationType>& obj, const Function<bool(const T&)>& predicate)
|
||||
{
|
||||
Array<T, AllocationType> result;
|
||||
Where(obj, predicate, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Projects each element of a sequence into a new form.
|
||||
/// </summary>
|
||||
/// <param name="obj">The target collection.</param>
|
||||
/// <param name="selector">A transform function to apply to each source element; the second parameter of the function represents the index of the source element.</param>
|
||||
/// <param name="result">The result list whose elements are the result of invoking the transform function on each element of source.</param>
|
||||
template<typename TResult, typename TSource, typename AllocationType>
|
||||
static void Select(const Array<TSource, AllocationType>& obj, const Function<TResult(const TSource&)>& selector, Array<TResult, AllocationType>& result)
|
||||
{
|
||||
for (const TSource& i : obj)
|
||||
result.Add(MoveTemp(selector(i)));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Projects each element of a sequence into a new form.
|
||||
/// </summary>
|
||||
/// <param name="obj">The target collection.</param>
|
||||
/// <param name="selector">A transform function to apply to each source element; the second parameter of the function represents the index of the source element.</param>
|
||||
/// <returns>The result list whose elements are the result of invoking the transform function on each element of source.</returns>
|
||||
template<typename TResult, typename TSource, typename AllocationType>
|
||||
static Array<TResult, AllocationType> Select(const Array<TSource, AllocationType>& obj, const Function<TResult(const TSource&)>& selector)
|
||||
{
|
||||
Array<TResult, AllocationType> result;
|
||||
Select(obj, selector, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removes all the elements that match the conditions defined by the specified predicate.
|
||||
/// </summary>
|
||||
/// <param name="obj">The target collection to modify.</param>
|
||||
/// <param name="predicate">A transform function that defines the conditions of the elements to remove.</param>
|
||||
template<typename T, typename AllocationType>
|
||||
static void RemoveAll(Array<T, AllocationType>& obj, const Function<bool(const T&)>& predicate)
|
||||
{
|
||||
for (int32 i = obj.Count() - 1; i >= 0; i--)
|
||||
{
|
||||
if (predicate(obj[i]))
|
||||
obj.RemoveAtKeepOrder(i);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removes all the elements that match the conditions defined by the specified predicate.
|
||||
/// </summary>
|
||||
/// <param name="obj">The target collection to process.</param>
|
||||
/// <param name="predicate">A transform function that defines the conditions of the elements to remove.</param>
|
||||
/// <returns>The result list whose elements are the result of invoking the transform function on each element of source.</returns>
|
||||
template<typename T, typename AllocationType>
|
||||
static Array<T, AllocationType> RemoveAll(const Array<T, AllocationType>& obj, const Function<bool(const T&)>& predicate)
|
||||
{
|
||||
Array<T, AllocationType> result;
|
||||
for (const T& i : obj)
|
||||
{
|
||||
if (!predicate(i))
|
||||
result.Ass(i);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Groups the elements of a sequence according to a specified key selector function.
|
||||
/// </summary>
|
||||
@@ -109,7 +193,7 @@ public:
|
||||
template<typename TSource, typename TKey, typename AllocationType>
|
||||
static void GroupBy(const Array<TSource, AllocationType>& obj, const Function<TKey(TSource const&)>& keySelector, Array<IGrouping<TKey, TSource>, AllocationType>& result)
|
||||
{
|
||||
Dictionary<TKey, IGrouping<TKey, TSource>> data(static_cast<int32>(obj.Count() * 3.0f));
|
||||
Dictionary<TKey, IGrouping<TKey, TSource>> data;
|
||||
for (int32 i = 0; i < obj.Count(); i++)
|
||||
{
|
||||
const TKey key = keySelector(obj[i]);
|
||||
|
||||
@@ -616,9 +616,7 @@ public:
|
||||
}
|
||||
else
|
||||
{
|
||||
Dictionary tmp = MoveTemp(other);
|
||||
other = *this;
|
||||
*this = MoveTemp(tmp);
|
||||
::Swap(other, *this);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -45,6 +45,16 @@ public:
|
||||
};
|
||||
|
||||
public:
|
||||
/// <summary>
|
||||
/// Sorts the linear data array using Quick Sort algorithm (non recursive version, uses temporary stack collection).
|
||||
/// </summary>
|
||||
/// <param name="data">The data container.</param>
|
||||
template<typename T, typename AllocationType = HeapAllocation>
|
||||
FORCE_INLINE static void QuickSort(Array<T, AllocationType>& data)
|
||||
{
|
||||
QuickSort(data.Get(), data.Count());
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Sorts the linear data array using Quick Sort algorithm (non recursive version, uses temporary stack collection).
|
||||
/// </summary>
|
||||
|
||||
@@ -58,7 +58,7 @@ bool Log::Logger::Init()
|
||||
int32 remaining = oldLogs.Count() - maxLogFiles + 1;
|
||||
if (remaining > 0)
|
||||
{
|
||||
Sorting::QuickSort(oldLogs.Get(), oldLogs.Count());
|
||||
Sorting::QuickSort(oldLogs);
|
||||
|
||||
// Delete the oldest logs
|
||||
int32 i = 0;
|
||||
|
||||
@@ -15,6 +15,8 @@ const Float2 Float2::Zero(0.0f);
|
||||
template<>
|
||||
const Float2 Float2::One(1.0f);
|
||||
template<>
|
||||
const Float2 Float2::Half(0.5f);
|
||||
template<>
|
||||
const Float2 Float2::UnitX(1.0f, 0.0f);
|
||||
template<>
|
||||
const Float2 Float2::UnitY(0.0f, 1.0f);
|
||||
|
||||
@@ -44,6 +44,9 @@ public:
|
||||
// Vector with all components equal 1
|
||||
static FLAXENGINE_API const Vector2Base<T> One;
|
||||
|
||||
// Vector with all components equal 0.5
|
||||
static FLAXENGINE_API const Vector2Base<T> Half;
|
||||
|
||||
// Vector X=1, Y=0
|
||||
static FLAXENGINE_API const Vector2Base<T> UnitX;
|
||||
|
||||
|
||||
@@ -17,6 +17,8 @@ const Float4 Float4::Zero(0.0f);
|
||||
template<>
|
||||
const Float4 Float4::One(1.0f);
|
||||
template<>
|
||||
const Float4 Float4::Half(0.5f);
|
||||
template<>
|
||||
const Float4 Float4::UnitX(1.0f, 0.0f, 0.0f, 0.0f);
|
||||
template<>
|
||||
const Float4 Float4::UnitY(0.0f, 1.0f, 0.0f, 0.0f);
|
||||
|
||||
@@ -54,6 +54,9 @@ public:
|
||||
// Vector with all components equal 1
|
||||
static FLAXENGINE_API const Vector4Base<T> One;
|
||||
|
||||
// Vector with all components equal 0.5
|
||||
static FLAXENGINE_API const Vector4Base<T> Half;
|
||||
|
||||
// Vector X=1, Y=0, Z=0, W=0
|
||||
static FLAXENGINE_API const Vector4Base<T> UnitX;
|
||||
|
||||
|
||||
@@ -304,7 +304,7 @@ template<typename T>
|
||||
inline void Swap(T& a, T& b) noexcept
|
||||
{
|
||||
T tmp = MoveTemp(a);
|
||||
a = b;
|
||||
a = MoveTemp(b);
|
||||
b = MoveTemp(tmp);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user