Skip to content

Instantly share code, notes, and snippets.

View martinmoene's full-sized avatar

Martin Moene martinmoene

View GitHub Profile
/*
* ./format-base.h
*
* In the public domain
*
* Author: Martin Moene
*/
#ifndef FORMAT_BASE_H_INCLUDED
#define FORMAT_BASE_H_INCLUDED
@martinmoene
martinmoene / program.config.hpp
Last active December 14, 2020 06:09
Tweak-header, A New Approach to Build-Time Library Configuration, by Colby Pike aka vector-of-bool. Oct 4, 2020
// Tweak-header, A New Approach to Build-Time Library Configuration,
// by Colby Pike aka vector-of-bool. Oct 4, 2020
// https://vector-of-bool.github.io/2020/10/04/lib-configuration.html
#include <cstdlib>
#include <string>
namespace program { namespace config {
namespace defaults
@martinmoene
martinmoene / main.cpp
Last active June 7, 2019 08:16
Converting endianness (C++11) - inspired by https://github.com/MayaPosch/ByteBauble
#include "nonstd/endian.hpp"
#include <iostream>
#define print_to_big_endian(x) \
std::cout << #x << ": " << std::hex << to_num(x) << " to be: " << to_num(nonstd::to_big_endian(x)) << "\n"
#define print_to_little_endian(x) \
std::cout << #x << ": " << std::hex << to_num(x) << " to le: " << to_num(nonstd::to_little_endian(x)) << "\n"
#define print_to_native_endian(x) \
@martinmoene
martinmoene / Jinja2Cpp-ParseError.cpp
Last active April 29, 2019 11:42
Jinja2Cpp: ParseError and assignment/swap -- Note: nonstd::expected uses swap() in operator=( expected const & other ).
//
// If you write
// ParseError(ParseError&& other) noexcept(true) = default;
// the type won't be treated as nothrow move-constructable.
// But if you write this ctor manually - everything is ok.
#include <initializer_list>
#include <utility>
#include <vector>
@martinmoene
martinmoene / app-state-machine.cpp
Last active November 5, 2022 09:26
C++17 example of user interface with state machine based on std::variant.
// C++17 example of user interface with state machine based on std::variant.
// The state machine engine is based on code by Mateusz Pusz,
// https://github.com/mpusz/fsm-variant (MIT-license)
// CppCon 2016. Ben Deane: Using Types Effectively,
// https://www.youtube.com/watch?v=ojZbFIQSdl8
//------------------------------------------------------------------------
// State machine engine:
@martinmoene
martinmoene / cmd.txt
Last active October 10, 2018 13:20
Compare number of lines in different Subversion revisions of files
# file1.cpp has code removed unintentionally:
> svn-diff-size.py --threshold -60 --histogram --revision 4710:4839 Folder/*.cpp
Folder/file1.cpp: (4317 -> 4136): -181
Folder/file2.cpp: (2323 -> 2145): -178
Folder/file2.cpp: (1031 -> 886): -145
Histogram delta line-count:
-200: 0
-180: 2 **
@martinmoene
martinmoene / check_result.hpp
Created May 17, 2018 13:49
Kenny Kerr. Windows with C++ - C++ and the Windows API. July 2011.
/**
* \file win/check_result.h
*
* \brief Windows API.
* \author Kenny Kerr, Martin Moene
* \date 3 February 2016
* \since 0.0.0
*
* From: Kenny Kerr. Windows with C++ - C++ and the Windows API. July 2011.
* https://msdn.microsoft.com/%20magazine/hh288076
@martinmoene
martinmoene / pipe-godbolt-c++98.cpp
Last active December 15, 2017 23:14
Simple C++98 functional algorithms for optional-lite
// Simple C++98 functional algorithms for optional-lite
#include <functional>
#include <optional.hpp>
#define RESULT_OF_T(F) typename nonstd::optional_lite::detail::result_of<F>::type
// map(f): perform an operation `U f(T)` on optional's
// content if present and return an nonstd::optional<U>.
@martinmoene
martinmoene / catch-toclify.bat
Last active August 27, 2017 22:07
Create ToC in markdown files for Catch2 documentation
@echo off & setlocal enableextensions
::
:: ./Catch-toclify.bat - ... (https://github.com/rasbt/markdown-toclify)
::
if [%1] == [] goto :Usage
set files= %*%
set root=%~dp0
set toclify=%root%\markdown-toclify.py
@martinmoene
martinmoene / PVS-Studio.txt
Last active July 21, 2017 07:40
lest Static Analyses
V813 Decreased performance. The 'message' argument should probably be rendered as a constant reference. 05-select lest.hpp 423
V813 Decreased performance. The 'message' argument should probably be rendered as a constant reference. 05-select lest.hpp 428
V813 Decreased performance. The 'type' argument should probably be rendered as a constant reference. 05-select lest.hpp 433
V813 Decreased performance. The 'words' argument should probably be rendered as a constant reference. 05-select lest.hpp 781
V813 Decreased performance. The 'word' argument should probably be rendered as a constant reference. 05-select lest.hpp 784
V813 Decreased performance. The 'note' argument should probably be rendered as a constant reference. 05-select lest.hpp 789
V813 Decreased performance. The 'test' argument should probably be rendered as a constant reference. 05-select lest.hpp 803
V813 Decreased performance. The 'whats', 'line' arguments should probably be rendered as constant references. 05-select lest.hpp 829
V813 Decreased p