📄 util.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 + -