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
jbelloncastro /
Last active Mar 28, 2020
Search in youtube using youtube-dl and pipe the audio to VLC
#!/bin/bash -x
vlc_options=":sout=#transcode{vcodec=none,scodec=none}:http{mux=ogg,dst=:8080/} :no-sout-all :sout-keep"
youtube-dl "ytsearch1:$search" -r 200k -f 'bestaudio[ext=m4a]' -o - | cvlc - ${vlc_options}
jbelloncastro /
Created Jan 28, 2020
Double dispatch C++
enum class Kind : unsigned int;
struct Base {
const Kind kind;
explicit Base(Kind kind) : kind(kind) {}
template <class T> bool is() const { return kind == T::kind; }
template <class T> const T* cast() const { return is<T>()? static_cast<const T*>(this) : nullptr; }
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; }
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 / 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
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 / plot.gnuplot
Created Sep 30, 2019
Gnuplot chart for a histogram with error bars
View plot.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
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
std::string operator""_Mi( unsigned long long value ) {
struct Generator {
Generator( unsigned long long value ) :
jbelloncastro /
Last active Aug 28, 2019
nlohmann::json SAX parsing example
#ifndef SAX_H
#define SAX_H
#include <nlohmann/json.hpp>
#include <bitset>
#include <string_view>
#include <sstream>
template < class T >
struct sax_reader;
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());
You can’t perform that action at this time.