Skip to content

Instantly share code, notes, and snippets.

Jorge jbelloncastro

Block or report user

Report or block jbelloncastro

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
View clang dump layouts
clang++ -Xclang -fdump-record-layouts file.cpp
@jbelloncastro
jbelloncastro / generate_array.cpp
Last active Jul 8, 2019
Create arrays of no-default-constructible elements with std::generate like syntax.
View generate_array.cpp
#include <array>
#include <utility>
template < class F, size_t... Ns >
constexpr
std::array<decltype(std::declval<F>()(size_t(0))),sizeof...(Ns)>
generate_array( F&& f, std::index_sequence<Ns...> )
{
return { f(Ns)... };
}
@jbelloncastro
jbelloncastro / literal.hpp
Last active Aug 22, 2019
Embed string literals in a datatype
View literal.hpp
#include <array>
#include <tuple>
#include <string_view>
#include <utility>
template < class CharT, CharT... cs >
struct Literal {
static bool match( std::basic_string_view<CharT> s ) {
static constexpr std::array<CharT,sizeof...(cs)> value{cs...};
return std::equal(value.begin(), value.end(), s.begin(), s.end());
@jbelloncastro
jbelloncastro / sax_parse.cc
Last active Aug 28, 2019
nlohmann::json SAX parsing example
View sax_parse.cc
#ifndef SAX_H
#define SAX_H
#include <nlohmann/json.hpp>
#include <bitset>
#include <string_view>
#include <sstream>
template < class T >
struct sax_reader;
@jbelloncastro
jbelloncastro / integer-string-literal.cpp
Created Sep 9, 2019
Create a string from an integer without using std::to_string or std::printf
View integer-string-literal.cpp
#include <algorithm>
#include <cstring>
#include <string>
#include <limits>
// Literal for the IEC Mebi binary prefix
static
std::string operator""_Mi( unsigned long long value ) {
struct Generator {
Generator( unsigned long long value ) :
@jbelloncastro
jbelloncastro / plot.gnuplot
Created Sep 30, 2019
Gnuplot chart for a histogram with error bars
View plot.gnuplot
#!/usr/bin/gnuplot
# Output format
set terminal png enhanced font "freesans,16" linewidth 2
# Caption
set key inside top horizontal nobox font ",12"
set xlabel ''
set ylabel ''
set auto x
View dispatch.cpp
#include <memory>
#include <tuple>
#include <algorithm>
#include <experimental/array>
#include <type_traits>
namespace {
// This fails to evaluate if any element in Args is not a valid type.
// Otherwise it evaluates to void.
@jbelloncastro
jbelloncastro / tuple_switch.cpp
Last active Oct 8, 2019
Switch/case like function for tuples/pairs
View tuple_switch.cpp
#include <tuple>
#include <type_traits>
enum class A {
a, b
};
enum class B {
c, d
};
@jbelloncastro
jbelloncastro / dispatch_functor.cpp
Last active Oct 23, 2019
Deduce function argument type and perform runtime type dispatch based on that type
View dispatch_functor.cpp
#include <type_traits>
#include <llvm/ADT/STLExtras.h>
struct Base { virtual ~Base() = default; };
bool traverse( const Base* base, llvm::function_ref<bool(const Base*)> );
struct dispatcher {
template <class F, class U, class... Args>
auto operator()( F &&f, U &&u, Args&&... args ) const {
@jbelloncastro
jbelloncastro / ival_overwrite.cpp
Last active Oct 26, 2019
Interval map that overwrites values instead of accumulating
View ival_overwrite.cpp
#include <boost/icl/interval_map.hpp>
#include <boost/optional.hpp>
#include <iostream>
using namespace boost::icl;
template <class Type>
struct inplace_overwrite : identity_based_inplace_combine<Type> {
void operator()(Type &object, const Type &operand) const { object = operand; }
};
You can’t perform that action at this time.