Add msvc natvis for better debugging

This commit is contained in:
Doyle Thai 2018-01-25 12:26:33 +11:00
parent a412bf0bfa
commit 9f25d5a98e
2 changed files with 43 additions and 7 deletions

14
dqn.h
View File

@ -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
View 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&lt;*&gt;">
<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&lt;*&gt;">
<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>