Skip to content

Instantly share code, notes, and snippets.

@yohhoy
yohhoy / mock-string.cpp
Last active July 2, 2021 02:12
Mock class template
#include <initializer_list>
namespace mock {
template <class T>
struct allocator {};
template <class T>
struct char_traits {};
// C++20 https://timsong-cpp.github.io/cppwp/n4861/basic.string
template<class charT, class traits = char_traits<charT>,
@yohhoy
yohhoy / utf8_util.hpp
Last active September 15, 2020 04:58
UTF-8 util
bool starts_with_utf8bom(std::string_view s)
{
constexpr char utf8_bom[3] = { 0xEF, 0xBB, 0xBF };
return s.length() >= 3 && std::equal(utf8_bom, utf8_bom + 3, s.begin());
}
std::string& erase_utf8bom(std::string& text)
{
if (starts_with_utf8bom(text)) {
text.erase(0, 3);
#include <type_traits>
int main() {
int x = 42;
static_assert(std::is_same_v<decltype( x ), int>);
static_assert(std::is_same_v<decltype((x)), int&>);
int (y) = 42; // redundant parentheses
static_assert(std::is_same_v<decltype( y ), int>);
static_assert(std::is_same_v<decltype((y)), int&>);
@yohhoy
yohhoy / spdlog-templ.cpp
Last active July 15, 2021 07:06
template code for spdlog library
#include <memory>
#include <vector>
#define SPDLOG_ACTIVE_LEVEL SPDLOG_LEVEL_DEBUG
#include "spdlog/spdlog.h"
#include "spdlog/sinks/stdout_color_sinks.h"
#include "spdlog/sinks/daily_file_sink.h"
#include "spdlog/sinks/rotating_file_sink.h"
int main(int argc, char* argv[])
{
@yohhoy
yohhoy / same_as.cpp
Last active October 17, 2019 03:27
same_as concept in C++20 Standard Library
//
// requires Micosoft VisualC++ 2019 16.3 Preview 2 that implements P0717R1.
//
// https://devblogs.microsoft.com/cppblog/c20-concepts-are-here-in-visual-studio-2019-version-16-3/
// https://wg21.link/p0717r1 Semantic constraint matching for concepts
#include <type_traits>
#if 1
template <class T, class U>
concept same_as_impl = std::is_same_v<T, U>;
@yohhoy
yohhoy / subsume-P0717R1.txt
Last active September 11, 2019 04:53
C++20 Concepts constraints subsumption analysis
constraint-expressions:
- C1<T>^c && C2<T>^c
- C1<T>^d
# concept version
template <class T> concept C1<T> = true^a;
template <class T> concept C2<T> = true^b;
normal form of P = true^a ∧ true^b
normal form of Q = true^a
@yohhoy
yohhoy / str2tc.c
Created August 19, 2019 05:00
FFmpeg/av_timecode_init_from_string() with "59.94DF" support
/*
* https://github.com/intel/ffmpeg_libyami/blob/master/libavutil/timecode.c
*/
inline int av_timecode_init_from_string2(AVTimecode* tc, AVRational rate, const char* str)
{
#if 0
return av_timecode_init_from_string(&tc, rate, str, NULL);
#else
char c;
int hh, mm, ss, ff;
// callee.m iOS Native(Objective-C) class
@interface NativeType
- (void)method:(int)arg;
@end

@implementation NativeType
// ...
@end
@yohhoy
yohhoy / invokeObjC.c
Created June 14, 2019 18:44
invoke Obj-C from pure-C
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <objc/message.h>
SEL sel_propSetter(Class clazz, const char* pname)
{
char* attr = property_copyAttributeValue(class_getProperty(clazz, pname), "S");
@yohhoy
yohhoy / ver.cpp
Created April 18, 2019 15:57
compiler version snippet
#if defined(__clang__)
#pragma message "Clang " __VERSION__
#elif defined(__GNUC__)
#pragma message "GCC " __VERSION__
#elif defined(_MSC_VER)
// https://qiita.com/yumetodo/items/8c112fca0a8e6b47072d
#define STR(s) #s
#define DUMP(s) #s "=" STR(s)
#pragma message ("MSVC " DUMP(_MSC_VER) " " DUMP(_MSC_FULL_VER))
#endif