cucul.c just in case.tags/v0.99.beta14
@@ -194,11 +194,6 @@ int Cucul::rand (int min, int max) | |||||
return cucul_rand(min, max); | return cucul_rand(min, max); | ||||
} | } | ||||
unsigned int Cucul::sqrt (unsigned int v) | |||||
{ | |||||
return cucul_sqrt(v); | |||||
} | |||||
Cucul::Sprite * Cucul::load_sprite (char const *f) | Cucul::Sprite * Cucul::load_sprite (char const *f) | ||||
{ | { | ||||
Cucul::Sprite *s = new Cucul::Sprite(); | Cucul::Sprite *s = new Cucul::Sprite(); | ||||
@@ -88,7 +88,6 @@ class Cucul { | |||||
void draw_thin_triangle ( int, int, int, int, int, int); | void draw_thin_triangle ( int, int, int, int, int, int); | ||||
void fill_triangle ( int, int, int, int, int, int, char const *); | void fill_triangle ( int, int, int, int, int, int, char const *); | ||||
int rand (int, int); | int rand (int, int); | ||||
unsigned int sqrt (unsigned int); | |||||
Sprite * load_sprite (char const *); | Sprite * load_sprite (char const *); | ||||
int get_sprite_frames (Cucul::Sprite const *); | int get_sprite_frames (Cucul::Sprite const *); | ||||
int get_sprite_width (Cucul::Sprite const *, int); | int get_sprite_width (Cucul::Sprite const *, int); | ||||
@@ -18,7 +18,6 @@ libcucul_la_SOURCES = \ | |||||
transform.c \ | transform.c \ | ||||
charset.c \ | charset.c \ | ||||
colour.c \ | colour.c \ | ||||
math.c \ | |||||
line.c \ | line.c \ | ||||
box.c \ | box.c \ | ||||
conic.c \ | conic.c \ | ||||
@@ -236,6 +236,17 @@ void cucul_free(cucul_t *qq) | |||||
free(qq); | free(qq); | ||||
} | } | ||||
/** \brief Generate a random integer within a range. | |||||
* | |||||
* \param min The lower bound of the integer range. | |||||
* \param max The upper bound of the integer range. | |||||
* \return A random integer comprised between \p min and \p max, inclusive. | |||||
*/ | |||||
int cucul_rand(int min, int max) | |||||
{ | |||||
return min + (int)((1.0*(max-min+1)) * rand() / (RAND_MAX+1.0)); | |||||
} | |||||
/** \brief Export a canvas into a foreign format. | /** \brief Export a canvas into a foreign format. | ||||
* | * | ||||
* This function exports a libcucul canvas into various foreign formats such | * This function exports a libcucul canvas into various foreign formats such | ||||
@@ -79,6 +79,7 @@ void cucul_set_size(cucul_t *, unsigned int, unsigned int); | |||||
unsigned int cucul_get_width(cucul_t *); | unsigned int cucul_get_width(cucul_t *); | ||||
unsigned int cucul_get_height(cucul_t *); | unsigned int cucul_get_height(cucul_t *); | ||||
void cucul_free(cucul_t *); | void cucul_free(cucul_t *); | ||||
int cucul_rand(int, int); | |||||
/* @} */ | /* @} */ | ||||
/** \defgroup buffer Buffer handling | /** \defgroup buffer Buffer handling | ||||
@@ -143,15 +144,6 @@ void cucul_draw_thin_triangle(cucul_t *, int, int, int, int, int, int); | |||||
void cucul_fill_triangle(cucul_t *, int, int, int, int, int, int, char const *); | void cucul_fill_triangle(cucul_t *, int, int, int, int, int, int, char const *); | ||||
/* @} */ | /* @} */ | ||||
/** \defgroup math Mathematical functions | |||||
* | |||||
* These functions provide a few useful math-related routines. | |||||
* | |||||
* @{ */ | |||||
int cucul_rand(int, int); | |||||
unsigned int cucul_sqrt(unsigned int); | |||||
/* @} */ | |||||
/** \defgroup sprite Sprite handling | /** \defgroup sprite Sprite handling | ||||
* | * | ||||
* These functions provide high level routines for sprite loading, animation | * These functions provide high level routines for sprite loading, animation | ||||
@@ -1,68 +0,0 @@ | |||||
/* | |||||
* libcucul Canvas for ultrafast compositing of Unicode letters | |||||
* Copyright (c) 2002-2006 Sam Hocevar <sam@zoy.org> | |||||
* All Rights Reserved | |||||
* | |||||
* $Id$ | |||||
* | |||||
* This library is free software; you can redistribute it and/or | |||||
* modify it under the terms of the Do What The Fuck You Want To | |||||
* Public License, Version 2, as published by Sam Hocevar. See | |||||
* http://sam.zoy.org/wtfpl/COPYING for more details. | |||||
*/ | |||||
/* | |||||
* This file contains simple mathematical routines. | |||||
*/ | |||||
#include "config.h" | |||||
#if !defined(__KERNEL__) | |||||
# include <stdlib.h> | |||||
#endif | |||||
#include "cucul.h" | |||||
#include "cucul_internals.h" | |||||
/** \brief Generate a random integer within a range. | |||||
* | |||||
* \param min The lower bound of the integer range. | |||||
* \param max The upper bound of the integer range. | |||||
* \return A random integer comprised between \p min and \p max, inclusive. | |||||
*/ | |||||
int cucul_rand(int min, int max) | |||||
{ | |||||
return min + (int)((1.0*(max-min+1)) * rand() / (RAND_MAX+1.0)); | |||||
} | |||||
/** \brief Approximate a square root, using Newton's method to avoid | |||||
* costly floating point calculations. | |||||
* | |||||
* \param a A positive integer. | |||||
* \return The approximate square root of \p a. | |||||
*/ | |||||
unsigned int cucul_sqrt(unsigned int a) | |||||
{ | |||||
if(a == 0) | |||||
return 0; | |||||
if(a < 1000000000) | |||||
{ | |||||
unsigned int x = a < 10 ? 1 | |||||
: a < 1000 ? 10 | |||||
: a < 100000 ? 100 | |||||
: a < 10000000 ? 1000 | |||||
: 10000; | |||||
/* Newton's method. Three iterations would be more than enough. */ | |||||
x = (x * x + a) / x / 2; | |||||
x = (x * x + a) / x / 2; | |||||
x = (x * x + a) / x / 2; | |||||
x = (x * x + a) / x / 2; | |||||
return x; | |||||
} | |||||
return 2 * cucul_sqrt(a / 4); | |||||
} | |||||