|
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 |
dcf1b6 |
char* readline(FILE *f);
|
|
Ivan Mahonin |
dcf1b6 |
|
|
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
|