Skip to content

Instantly share code, notes, and snippets.

@windoze
windoze / make_function
Created December 9, 2014 15:20
make_function(Fn) and make_function_type<Fn>
// make_function
template<typename T> struct remove_class { };
template<typename C, typename R, typename... A>
struct remove_class<R(C::*)(A...)> { using type = R(A...); };
template<typename C, typename R, typename... A>
struct remove_class<R(C::*)(A...) const> { using type = R(A...); };
template<typename C, typename R, typename... A>
struct remove_class<R(C::*)(A...) volatile> { using type = R(A...); };
template<typename C, typename R, typename... A>
struct remove_class<R(C::*)(A...) const volatile> { using type = R(A...); };
@windoze
windoze / make_tuple_indices
Created December 9, 2014 15:22
make_tuple_indices extracts elements from tuple
template <std::size_t...> struct tuple_indices {};
template <std::size_t Sp, class IntTuple, std::size_t Ep> struct make_indices_imp;
template <std::size_t Sp, std::size_t... Indices, std::size_t Ep>
struct make_indices_imp<Sp, tuple_indices<Indices...>, Ep>
{ typedef typename make_indices_imp<Sp+1, tuple_indices<Indices..., Sp>, Ep>::type type; };
template <std::size_t Ep, std::size_t... Indices>
struct make_indices_imp<Ep, tuple_indices<Indices...>, Ep>
{ typedef tuple_indices<Indices...> type; };
@windoze
windoze / invoke
Created December 9, 2014 15:24
Call any callable with perfect forwarding
template <class Fp, class A0, class... Args>
inline auto invoke(Fp&& f, A0&& a0, Args&&... args)
-> decltype((std::forward<A0>(a0).*f)(std::forward<Args>(args)...))
{ return (std::forward<A0>(a0).*f)(std::forward<Args>(args)...); }
template <class Fp, class A0, class... Args>
inline auto invoke(Fp&& f, A0&& a0, Args&&... args)
-> decltype(((*std::forward<A0>(a0)).*f)(std::forward<Args>(args)...))
{ return ((*std::forward<A0>(a0)).*f)(std::forward<Args>(args)...); }
@windoze
windoze / apply
Created December 9, 2014 15:29
Call any callable with a string vector or array, use with make_function and make_tuple_indices gists
template<typename Vec, typename Ret, class... Args>
struct function_wrapper;
// function_wrapper
template<typename Vec, typename Ret, class... Args>
struct function_wrapper<Vec, std::function<Ret(Args...)>> {
typedef std::function<Ret(Args...)> function_type;
typedef std::tuple<typename std::decay<Args>::type...> arg_list_type;
typedef Ret result_type;
static constexpr size_t arity=sizeof...(Args);
#include <iostream>
#include <functional>
typedef std::function<int(int)> fii;
template<typename Fn>
auto f(Fn fn)
-> typename std::enable_if<!std::is_constructible<fii, Fn>::value, int>::type
{ return 10; }
@windoze
windoze / test.swift
Created September 15, 2015 07:45
Swift 2 compiler bug
struct A<T1, T2> {
var f:B<T1, T2>
var b:B<T2, T1>
var v:T1
}
struct B<T1, T2> {
}
@windoze
windoze / gist:f3cbba9ff2cd8fc63177
Last active October 16, 2015 17:09
Random pick some IP address from a subnet
#include <cstdint>
#include <array>
#include <vector>
#include <iostream>
#include <random>
inline constexpr uint32_t subnet_mask(int len) {
return 0xFFFFFFFF >> (32-len) << (32-len);
}
@windoze
windoze / rx-asio.hpp
Created December 19, 2015 14:06
Boost.ASIO scheduler for RxCPP
#include "rxcpp/rx-scheduler.hpp"
// TODO: C++17 Networking TS
#ifdef WITHOUT_BOOST
// Standalone ASIO
#include <asio.hpp>
namespace asio_ns=::asio
namespace system_ns=::std
#else
// Boost.ASIO
@windoze
windoze / event_list.cpp
Created January 16, 2016 08:27
interview test
#include <random>
#include <unordered_map>
#include <vector>
class EventList {
public:
void insert(std::pair<size_t, size_t> event_with_ts) {
if(event_idx.find(event_with_ts.first)==event_idx.end()) {
events.push_back(event_with_ts);
event_idx[event_with_ts.first]=events.size()-1;
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"adminUsername": {
"type": "string",
"metadata": {
"description": "Admin username for VM"
}
},