Skip to content

Instantly share code, notes, and snippets.

@tonisuter
tonisuter / gist:10a3a6b23773a459fb2b
Last active August 29, 2015 14:01
Refactoring Example: findMonth() function from Webkit
// before refactoring
// returns 0-11 (Jan-Dec); -1 on failure
static int findMonth(const char* monthStr)
{
ASSERT(monthStr);
char needle[4];
for (int i = 0; i < 3; ++i) {
if (!*monthStr)
return -1;
needle[i] = static_cast<char>(toASCIILower(*monthStr++));
@tonisuter
tonisuter / gist:8c344c6e023715902f0b
Last active August 29, 2015 14:03
Adding include directives using CDT
public static void includeHeaders(HashSet<String> headers, IASTTranslationUnit ast, IDocument document) {
StringBuffer includeText = new StringBuffer();
for(String headerName : headers) {
if(!isHeaderAlreadyIncluded(headerName, ast)) {
includeText.append("\n#include <" + headerName + ">");
}
}
if(includeText.length() > 0) {
try {
@tonisuter
tonisuter / NptTls.cpp
Last active August 29, 2015 14:04
Possible Refactorings
bool MatchDnsName(const char* hostname, const char* dns_name) {
// NULL or empty names don't match anything
if (hostname == NULL || *hostname == '\0') return false;
if (dns_name == NULL || *dns_name == '\0') return false;
// check for wildcards */
if (dns_name[0] == '*') {
// wildcard match, expect '*.' at the start, we don't match '*foo.com'
if (dns_name[1] != '.') return false;
@tonisuter
tonisuter / gist:155f057edb3d2b4baecf
Last active August 29, 2015 14:11
Pipe & Stages with varying task types
#include <iostream>
#include <type_traits>
template<typename IN, typename OUT = IN>
struct node {
using in_type = IN;
using out_type = OUT;
};
template<class A, class...>
@tonisuter
tonisuter / Liquefier.md
Last active August 29, 2015 14:13
FastFlow & Liquefier

FastFlow

Pipeline

  • Type: ff_pipe
  • Header: <ff/ffpipeline.hpp>

A pipeline is a stream parallel skeleton. It has multiple stages and a task type which defines the type of the elements (tasks) that are passed from stage to stage. Each stage runs on a separate thread and works on one task at a time.

The following example shows how a pipeline with 3 stages and task type int can be created. The pipe is started

let x = newHeading.x
let y = newHeading.y
let z = newHeading.z
let magnitude = sqrt(x*x + y*y + z*z)
import UIKit
import CoreMotion
class ViewController: UIViewController {
let motionManager = CMMotionManager()
var currentAngle:Double!
override func viewDidLoad() {
super.viewDidLoad()
-webkit-border-top-left-radius:10px;
-webkit-border-top-right-radius:10px;
-webkit-border-bottom-right-radius:10px;
-webkit-border-bottom-left-radius:10px;
-moz-border-radius-topleft:10px;
-moz-border-radius-topright:10px;
-moz-border-radius-bottomright:10px;
-moz-border-radius-bottomleft:10px;
border-top-left-radius:10px;
border-top-right-radius:10px;
-webkit-border-radius:10px;
-moz-border-radius:10px;
border-radius:10px;
-webkit-gradient(
linear,
left top,
left bottom,
color-stop(0, rgb(255,255,255)),
color-stop(1, rgb(255,0,0))
)
-moz-linear-gradient(
center top,
rgb(255,255,255) 0%,