X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Flyxlib.h;h=23894ee2ebea1d47d077ca3344ada70edd32e89f;hb=8d640dc77608bedddb5b00982c23665584f52d21;hp=f7512a7c72032bd0756d428348a3c52b0ac95bb5;hpb=c36aa67f7bbf964a624be7ced9b3bf03148ab1db;p=lyx.git diff --git a/src/support/lyxlib.h b/src/support/lyxlib.h index f7512a7c72..23894ee2eb 100644 --- a/src/support/lyxlib.h +++ b/src/support/lyxlib.h @@ -1,38 +1,60 @@ // -*- C++ -*- -/* This file is part of - * ====================================================== - * - * LyX, The Document Processor - * - * Copyright (C) 1995 Matthias Ettrich - * Copyright (C) 1995-1999 The LyX Team. +/** + * \file lyxlib.h + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. * - * ====================================================== */ + * A selection of useful system functions made + * handy for C++ usage. + * + * \author Lars Gullik Bjønnes + * + * Full author contact details are available in file CREDITS. + */ #ifndef LYX_LIB_H #define LYX_LIB_H -#include "LString.h" - -// Where can I put this? I found the occurence of the same code -// three/four times. Don't you think it better to use a macro definition -// (an inlined member of some class)? - -// This should have been a namespace -struct lyx { - /// - static char * getcwd(char * buffer, size_t size); - /// - static int chdir(char const * name); - /// generates an checksum - static unsigned long sum(char const * file); - /// returns a date string - static char * date(); - /// - static string getUserName(); - /// - static int kill(int pid, int sig); - /// - static void abort(); -}; +// always include (also with MSVC), to avoid compiler specific side effects +#include + +#ifdef _MSC_VER +/// Replacement for C99 round() +inline double round(double x) +{ + if (x < 0) + return ceil(x - 0.5); + else + return floor(x + 0.5); +} #endif + +namespace lyx { +namespace support { + +/// FIXME: some point to this hmm ? +int kill(int pid, int sig); + +/** + * Returns true if var is approximately equal to number with allowed error + * of 'error'. + * + * Usage: if (float_equal(var, number, 0.0001)) { } + * + * This will check if 'var' is approx. equal to 'number' with error of 1/1000 + */ +inline bool float_equal(double var, double number, double error) +{ + return (number - error <= var && var <= number + error); +} + +/// round \p x to nearest integer +inline int iround(double x) +{ + return static_cast(round(x)); +} + +} // namespace support +} // namespace lyx + +#endif /* LYX_LIB_H */