Add msvc natvis for better debugging
This commit is contained in:
parent
a412bf0bfa
commit
9f25d5a98e
14
dqn.h
14
dqn.h
@ -1725,11 +1725,11 @@ inline u32 Dqn_BitUnset(u32 const bits, u32 const flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
using Dqn_QuickSortLessThanCallback = bool (*)(const T *const , const T *const);
|
using Dqn_QuickSortLessThanCallback = bool (*)(T const *, T const *, void *);
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
DQN_FILE_SCOPE void Dqn_QuickSort(T *array, const i64 size,
|
DQN_FILE_SCOPE void Dqn_QuickSort(T *array, const i64 size,
|
||||||
Dqn_QuickSortLessThanCallback<T> IsLessThan)
|
Dqn_QuickSortLessThanCallback<T> IsLessThan, void *userContext = nullptr)
|
||||||
{
|
{
|
||||||
if (!array || size <= 1 || !IsLessThan) return;
|
if (!array || size <= 1 || !IsLessThan) return;
|
||||||
|
|
||||||
@ -1743,7 +1743,7 @@ DQN_FILE_SCOPE void Dqn_QuickSort(T *array, const i64 size,
|
|||||||
{
|
{
|
||||||
for (i32 checkIndex = 0; checkIndex < itemToInsertIndex; checkIndex++)
|
for (i32 checkIndex = 0; checkIndex < itemToInsertIndex; checkIndex++)
|
||||||
{
|
{
|
||||||
if (!IsLessThan(&array[checkIndex], &array[itemToInsertIndex]))
|
if (!IsLessThan(&array[checkIndex], &array[itemToInsertIndex], userContext))
|
||||||
{
|
{
|
||||||
T itemToInsert = array[itemToInsertIndex];
|
T itemToInsert = array[itemToInsertIndex];
|
||||||
for (i32 i = itemToInsertIndex; i > checkIndex; i--)
|
for (i32 i = itemToInsertIndex; i > checkIndex; i--)
|
||||||
@ -1773,7 +1773,7 @@ DQN_FILE_SCOPE void Dqn_QuickSort(T *array, const i64 size,
|
|||||||
pivotIndex = lastIndex;
|
pivotIndex = lastIndex;
|
||||||
|
|
||||||
// 4^, 8, 7, 5, 2, 3, 6
|
// 4^, 8, 7, 5, 2, 3, 6
|
||||||
if (IsLessThan(&array[startIndex], &array[pivotIndex])) partitionIndex++;
|
if (IsLessThan(&array[startIndex], &array[pivotIndex], userContext)) partitionIndex++;
|
||||||
startIndex++;
|
startIndex++;
|
||||||
|
|
||||||
// 4, |8, 7, 5^, 2, 3, 6*
|
// 4, |8, 7, 5^, 2, 3, 6*
|
||||||
@ -1782,7 +1782,7 @@ DQN_FILE_SCOPE void Dqn_QuickSort(T *array, const i64 size,
|
|||||||
// 4, 5, 2, 3, |7, 8, ^6*
|
// 4, 5, 2, 3, |7, 8, ^6*
|
||||||
for (auto checkIndex = startIndex; checkIndex < lastIndex; checkIndex++)
|
for (auto checkIndex = startIndex; checkIndex < lastIndex; checkIndex++)
|
||||||
{
|
{
|
||||||
if (IsLessThan(&array[checkIndex], &array[pivotIndex]))
|
if (IsLessThan(&array[checkIndex], &array[pivotIndex], userContext))
|
||||||
{
|
{
|
||||||
DQN_SWAP(T, array[partitionIndex], array[checkIndex]);
|
DQN_SWAP(T, array[partitionIndex], array[checkIndex]);
|
||||||
partitionIndex++;
|
partitionIndex++;
|
||||||
@ -1792,12 +1792,12 @@ DQN_FILE_SCOPE void Dqn_QuickSort(T *array, const i64 size,
|
|||||||
// Move pivot to right of partition
|
// Move pivot to right of partition
|
||||||
// 4, 5, 2, 3, |6, 8, ^7*
|
// 4, 5, 2, 3, |6, 8, ^7*
|
||||||
DQN_SWAP(T, array[partitionIndex], array[pivotIndex]);
|
DQN_SWAP(T, array[partitionIndex], array[pivotIndex]);
|
||||||
Dqn_QuickSort(array, partitionIndex, IsLessThan);
|
Dqn_QuickSort(array, partitionIndex, IsLessThan, userContext);
|
||||||
|
|
||||||
// Skip the value at partion index since that is guaranteed to be sorted.
|
// Skip the value at partion index since that is guaranteed to be sorted.
|
||||||
// 4, 5, 2, 3, (x), 8, 7
|
// 4, 5, 2, 3, (x), 8, 7
|
||||||
i32 oneAfterPartitionIndex = partitionIndex + 1;
|
i32 oneAfterPartitionIndex = partitionIndex + 1;
|
||||||
Dqn_QuickSort(array + oneAfterPartitionIndex, (size - oneAfterPartitionIndex), IsLessThan);
|
Dqn_QuickSort(array + oneAfterPartitionIndex, (size - oneAfterPartitionIndex), IsLessThan, userContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
36
dqn.natvis
Normal file
36
dqn.natvis
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
|
||||||
|
<Type Name="DqnArray<*>">
|
||||||
|
<DisplayString>{{count={count}/{max}}}</DisplayString>
|
||||||
|
<Expand>
|
||||||
|
<Item Name="[count]">count</Item>
|
||||||
|
<Item Name="[max]">max</Item>
|
||||||
|
<ArrayItems>
|
||||||
|
<Size>count</Size>
|
||||||
|
<ValuePointer>data</ValuePointer>
|
||||||
|
</ArrayItems>
|
||||||
|
</Expand>
|
||||||
|
</Type>
|
||||||
|
|
||||||
|
<Type Name="DqnMemStack::Block">
|
||||||
|
<DisplayString>{{size={size}/{used} prevBlock={prevBlock}}}</DisplayString>
|
||||||
|
</Type>
|
||||||
|
|
||||||
|
<Type Name="DqnMemAPI">
|
||||||
|
<DisplayString>{{bytesAllocated={bytesAllocated} lifetimeBytesAllocated={lifetimeBytesAllocated} lifetimeBytesFreed={lifetimeBytesFreed}}}</DisplayString>
|
||||||
|
</Type>
|
||||||
|
|
||||||
|
<Type Name="DqnHashTable<*>">
|
||||||
|
<DisplayString>{{numEntries={numEntries} numFreeEntries={numFreeEntries} usedEntriesIndex={usedEntriesIndex}}}</DisplayString>
|
||||||
|
<Expand>
|
||||||
|
<Item Name="[numEntries]">numEntries</Item>
|
||||||
|
<Item Name="[numFreeEntries]">numFreeEntries</Item>
|
||||||
|
<Item Name="[usedEntriesIndex]">usedEntriesIndex</Item>
|
||||||
|
</Expand>
|
||||||
|
</Type>
|
||||||
|
|
||||||
|
<Type Name="DqnString">
|
||||||
|
<DisplayString>{{len={len}/{max} {str,s}}}</DisplayString>
|
||||||
|
<StringView>str,s</StringView>
|
||||||
|
</Type>
|
||||||
|
</AutoVisualizer>
|
Loading…
Reference in New Issue
Block a user