Skip to content

Instantly share code, notes, and snippets.

#include "milayout.h"
#include <stdlib.h>
#include <stdarg.h>
static float mi__minf(float a, float b) { return a < b ? a : b; }
static float mi__maxf(float a, float b) { return a > b ? a : b; }
static int mi__getGrow(MIbox* box, int main)
{
return box->content.xy[main] > 0 ? box->grow : (box->grow | 1);
@memononen
memononen / diff3.cpp
Created December 7, 2021 19:33
3-way merge based on O(NP) Myers diff and diff3, merging per item
#include <stdio.h>
#include <vector>
#include <span>
#include <algorithm>
// Based on
// "An O(NP) Sequence Comparison Algorithm" by Sun Wu, Udi Manber and Gene Myers
// - https://publications.mpi-cbg.de/Wu_1990_6334.pdf
// - Good article visualizing Myer's older algorithm: https://epxx.co/artigos/diff_en.html
//
@memononen
memononen / merge.cpp
Last active December 4, 2021 19:19
3-way merge based on O(NP) Myers diff and diff3
#include <stdio.h>
#include <vector>
#include <span>
#include <algorithm>
// Based on
// "An O(NP) Sequence Comparison Algorithm" by Sun Wu, Udi Manber and Gene Myers
// - https://publications.mpi-cbg.de/Wu_1990_6334.pdf
// - Good article visualizing Myer's older algorithm: https://epxx.co/artigos/diff_en.html
//
@memononen
memononen / diff.cpp
Last active November 20, 2021 19:01
O(NP) diff with backtracking
#include <stdio.h>
#include <vector>
#include <algorithm>
// Based on "An O(NP) Sequence Comparison Algorithm" by Sun Wu, Udi Manber and Gene Myers
struct Edit {
enum Type { Insert, Delete, Common };
Edit() = default;
Edit(Type _type, int _a, int _b, int _n) : type(_type), a(_a), b(_b), n(_n) {}
@memononen
memononen / biasgaininf.c
Last active February 2, 2022 10:09
bias gain inflection point
float evalCurve(float x, float tx, float ty, float sa, float sb)
{
const float EPS = 1e-6f;
if (x < tx) {
return (ty * x) / (x + sa * (tx - x) + EPS);
} else {
return ((1-ty) * (x-1)) / ((1-x) - sb * (tx - x) + EPS) + 1.0f;
}
}
@memononen
memononen / easing.c
Last active October 7, 2020 21:37
Cheap Fake Cubic Easing Curve
//
// Copyright (c) 2013 Mikko Mononen memon@inside.org
//
// This software is provided 'as-is', without any express or implied
// warranty. In no event will the authors be held liable for any damages
// arising from the use of this software.
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
// 1. The origin of this software must not be misrepresented; you must not
/*
(0,0)
+..................
: image :
: :
: +----+ :
: |rect| :
: +----+ :
: :
...................
void mmul(float* m, const float* a, const float* b)
{
for (int r = 0; r < 4; r++)
for (int c = 0; c < 4; c++)
m[r*4+c] = a[r*4+0] * b[0*4+c] + a[r*4+1] * b[1*4+c] + a[r*4+2] * b[2*4+c] + a[r*4+3] * b[3*4+c];
}
void midentity(float* m)
{
for (int i = 0; i < 4; i++)
@memononen
memononen / gist:cef31ababbfa6cde5eea
Created November 23, 2014 19:05
Drawing clipped anti-aliased graph using triangle strip
// Draws a graph using a triangle strip and simple gradient texture.
// Anti-aliasing may be off by a half a pixel.
// Works reasonable well with smooth as well as noisy data.
// The basic idea is that we draw the graph using a full height quad (or two triangles)
// per segment between two samples, and then we calculate texture coordinates
// so that 1px anti-aliasing gradient passes through the data points. The texture coordinate
// is calculated using the segment normal and one segment end point.
struct Point {
float x, y;
@memononen
memononen / gist:9852437
Last active August 29, 2015 13:57
Things which are hard to do with IMGUI
Anything with complex persistent UI state.
- collapsable tree view
- a sortable list view
- graph UI (movable nodes connected w/ wires)
- timeline UI (movable boxes constrained on rows)