Blame projects/jigsaw/common.h

Ivan Mahonin fdbd7d
#ifndef COMMON_H
Ivan Mahonin fdbd7d
#define COMMON_H
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
Ivan Mahonin fc6557
#include <time.h>
Ivan Mahonin fdbd7d
#include <ctype.h>
Ivan Mahonin fdbd7d
#include <stdio.h>
Ivan Mahonin fdbd7d
#include <stdlib.h>
Ivan Mahonin fdbd7d
#include <stddef.h>
Ivan Mahonin fdbd7d
#include <stdarg.h>
Ivan Mahonin fdbd7d
#include <string.h>
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
#include <helianthus.h>
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
#include <GL/gl.h>
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
#include "geometry.h"
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
// types
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
typedef unsigned int Flags;
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
// log
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
static inline int dummy(int x) { return x; }
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
#define PREQUOTE(...) #__VA_ARGS__
Ivan Mahonin fdbd7d
#define QUOTE(...) PREQUOTE(__VA_ARGS__)
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
#define LOG(f, r, p0, p1, ...) ( fprintf((f), "%s%s: ", (p0), (p1)), fprintf((f), __VA_ARGS__), fprintf((f), "\n"), fflush(f), dummy(r) )
Ivan Mahonin fdbd7d
#define INF(...) LOG(stdout, 1, "INFO",    "", __VA_ARGS__)
Ivan Mahonin fdbd7d
#define WRN(...) LOG(stderr, 1, "WARNING", "", __VA_ARGS__)
Ivan Mahonin fdbd7d
#define ERR(...) LOG(stderr, 0, "ERROR",   "", __VA_ARGS__)
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
#define DIE(...) (ERR(__VA_ARGS__), exit(1), dummy(0))
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
#ifdef NDEBUG
Ivan Mahonin fdbd7d
#define DBG(...) (dummy(1))
Ivan Mahonin fdbd7d
#else
Ivan Mahonin fdbd7d
#define DBG(...) LOG(stdout, 1, "DEBUG: " __FILE__ ":" QUOTE(__LINE__) ": ", __func__, __VA_ARGS__)
Ivan Mahonin fdbd7d
#endif
Ivan Mahonin fdbd7d
#define TRC      DBG("trace")
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
// alloc
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
#define alignof __alignof__
Ivan Mahonin fdbd7d
#define ALIGN(s, a) ((((s)-1)/(a)+1)*(a))
Ivan Mahonin fdbd7d
#define ASIZEOF(t) align(sizeof(t), alignof(t))
Ivan Mahonin fdbd7d
#define COUNTOF(a) (sizeof(a)/ASIZEOF(*a))
Ivan Mahonin fdbd7d
static inline size_t align(size_t s, size_t a) { return ALIGN(s, a); }
Ivan Mahonin fdbd7d
void* alloc(size_t size);
Ivan Mahonin fdbd7d
void* alloc2d(size_t cnt, size_t size);
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
// str
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
char* vstrprintf(const char *fmt, va_list args);
Ivan Mahonin fdbd7d
char* strprintf(const char *fmt, ...);
Ivan Mahonin fdbd7d
char* unquote(char *s, char prefix, char suffix);
Ivan Mahonin fdbd7d
static inline char* trim(char *s) { return unquote(s, 0, 0); }
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
// arithm
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
static inline double mind(double a, double b) { return a < b ? a : b; }
Ivan Mahonin fdbd7d
static inline double maxd(double a, double b) { return a < b ? b : a; }
Ivan Mahonin fdbd7d
static inline double lintr(double a, double b, double k) { return a*(1-k) + b*k; }
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
// rand
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
static inline int randSign() { return rand()%2*2 - 1; }
Ivan Mahonin fdbd7d
static inline double randOne() { return rand()/(double)RAND_MAX; }
Ivan Mahonin fdbd7d
static inline double randTwo() { return randOne()*2 - 1; }
Ivan Mahonin fdbd7d
static inline Vec vrandOne() { return vec(randOne(), randOne()); }
Ivan Mahonin fdbd7d
static inline Vec vrandTwo() { return vec(randTwo(), randTwo()); }
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
static inline unsigned int randColor() { return colorByRGB(randOne(), randOne(), randOne()); }
Ivan Mahonin fdbd7d
static inline unsigned int randColorPtr(const void *ptr) { int s = rand(); srand((size_t)ptr); unsigned int c = randColor(); srand(s); return c; }
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
// spline
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
void cubicto(double x0, double y0, double x1, double y1, double x2, double y2, double x3, double y3, int levels);
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
Ivan Mahonin fdbd7d
#endif