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); | |||||
| } | |||||