Skip to content

Instantly share code, notes, and snippets.

@jonwis
jonwis / funcorfield.h
Created October 23, 2022 04:30
Func or field
// Tool to either invoke a method or read a field on a type.
class MyTypeName {
using TSelf = MyTypeName;
template<typename T> using func_or_field = std::variant<
T(TSelf::*)(),
T TSelf::*>;
template<typename T> auto invoke_func_or_field(func_or_field<T> const& fof)
{
@jonwis
jonwis / is_win10_build.h
Last active July 9, 2022 02:15
Version query for Windows 10 builds
#include <versionhelpers.h>
bool IsWindows10BuildOrGreater(uint16_t buildNumber)
{
OSVERSIONINFOEXW osvi = { sizeof(osvi) };
const auto conditionMask = VerSetConditionMask(
VerSetConditionMask(
VerSetConditionMask(
VerSetConditionMask(
0, VER_MAJORVERSION, VER_GREATER_EQUAL),
#include <wil/resource.h>
template<typename Q> bool SubmitThreadpoolLambda(Q&& fn)
{
using base_type = std::decay_t<Q>;
struct ContextObject : base_type
{
ContextObject(Q&& q) : base_type(std::move(q)) {}
std::pair<std::wstring_view, std::wstring_view> SplitAt(std::wstring_view const& source, wchar_t split)
{
auto splitpoint = source.find(split);
if (splitpoint != std::wstring_view::npos)
{
return { source.substr(0, splitpoint), source.substr(splitpoint + 1) };
}
else
{
return { source, { } };
template<typename TDevice> winrt::IAsyncOperation<TDevice> GetFirstDeviceAsync(winrt::hstring selector)
{
// Create a watcher. Try converting all the discovered device information records
// into real device instances. When the enumeration is complete, stop everything.
auto watcher = winrt::DeviceInformation::CreateWatcher(selector);
// DeviceWatcher enumeration ensures that all devices are enumerated, then
// raises 'EnumerationCompleted'. We'll use coroutines to model this.
winrt::handle event{ ::CreateEvent(nullptr, true, false, nullptr) };
winrt::check_bool(static_cast<bool>(event));
@jonwis
jonwis / ChangeTrackerSample.cs
Last active July 22, 2020 02:29
Sample of tracking changes
private async void StartTracking_Click(object sender, RoutedEventArgs e)
{
FolderPicker p = new FolderPicker();
p.FileTypeFilter.Add(".txt");
p.FileTypeFilter.Add(".jpg");
var f = await p.PickSingleFolderAsync();
var t = f.TryGetChangeTracker();
if (t != null)
{
t.Enable();