⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 util.cpp

📁 超强国际象棋引擎
💻 CPP
字号:
// util.cpp

// includes

#include <cmath>
#include <cstdarg>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <cctype>

#include "input.h"
#include "interface.h"
#include "search.h"
#include "util.h"

// functions

// util_init()

void util_init()
    {
    setvbuf(stdin, NULL, _IONBF, 0);
    setvbuf(stdout, NULL, _IONBF, 0);
    }

// random_init()

void random_init()
    {
    srand((unsigned)time(NULL));
    }

// random()

int random(int n)
    {
    double r;

    r = double(rand()) / (double(RAND_MAX) + 1.0);

    return int(floor(r*double(n)));
    }

// atoll()

sint64 atoll(const char string [])
    {

    sint64 n;

    sscanf(string, S64_FORMAT, &n);

    return n;
    }

// file_read_line()

bool file_read_line(FILE *file, char string [], int size)
    {

    char *ptr;

    if(fgets(string, size, file) == NULL)
        {
        if(feof(file))
            {
            return false;
            }
        else { }
        }

    // suppress '\n'

    ptr = strchr(string, '\n');

    if(ptr != NULL)
        * ptr = '\0';

    return true;
    }

// string_empty()

bool string_empty(const char string [])
    {

    return string == NULL || string[0] == '\0';
    }

// string_equals()

bool string_equals(const char string_1 [], const char string_2 [])
    {

    int c1, c2;

    while(true)
        {
        c1 = *string_1++;
        c2 = *string_2++;

        if(tolower(c1) != tolower(c2))
            return false;

        if(c1 == '\0')
            return true;
        }

    return false;
    }

// strdup()

char *strdup(const char string [])
    {

    char *address;

    // strdup() is not ANSI C

    address = (char *)malloc(strlen(string) + 1);
    strcpy(address, string);

    return address;
    }

// string_set()

void string_set(const char ** variable, const char string [])
    {
    if(*variable != NULL)
        free((void *)( *variable));
    *variable = strdup(string);
    }

// timer_reset()

void timer_reset(my_timer_t *timer)
    {

    timer->start_real = 0.0;
    timer->start_cpu = 0.0;
    timer->elapsed_real = 0.0;
    timer->elapsed_cpu = 0.0;
    timer->running = false;
    }

// timer_start()

void timer_start(my_timer_t *timer)
    {

    timer->running = true;
    timer->start_real = now_real();
    timer->start_cpu = now_cpu();
    }

// timer_stop()

void timer_stop(my_timer_t *timer)
    {

    timer->elapsed_real += now_real() - timer->start_real;
    timer->elapsed_cpu += now_cpu() - timer->start_cpu;
    timer->start_real = 0.0;
    timer->start_cpu = 0.0;
    timer->running = false;
    }

// timer_elapsed_real()

double timer_elapsed_real(const my_timer_t *timer)
    {

    double elapsed;

    elapsed = timer->elapsed_real;

    if(timer->running)
        elapsed += now_real() - timer->start_real;

    if(elapsed < 0.0)
        elapsed = 0.0;

    return elapsed;
    }

// timer_elapsed_cpu()

double timer_elapsed_cpu(const my_timer_t *timer)
    {

    double elapsed;

    elapsed = timer->elapsed_cpu;

    if(timer->running)
        elapsed += now_cpu() - timer->start_cpu;

    if(elapsed < 0.0)
        elapsed = 0.0;

    return elapsed;
    }

// send()

void send(const char format [], ...)
    {

    va_list arg_list;
    char string[4096];

    va_start(arg_list, format);
    vsprintf(string, format, arg_list);
    va_end(arg_list);

    fprintf(stdout, "%s\n", string);
    }

// show_version()

void show_version()
    {
    char *startup_banner = "\n"
        "" ENGINE " " VERSION "\n\n"
        "based on:\n"
        "Fruit 2.1 by Fabien Letouzey\n"
        "and Toga II by Thomas Gaksch\n"
        "with additional programming\n"
        "by Norman Schmidt\n"
        "timestamp: " __TIMESTAMP__ "\n";

    send(startup_banner);
    }

// end of util.cpp

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -