X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Flyxlib.h;h=23894ee2ebea1d47d077ca3344ada70edd32e89f;hb=ecbd047cffa1c4af95cf4ab91a7d2fded4a5584c;hp=8554ca0ec8e952b32805c2f99c01be4c15a6d584;hpb=5f2e3c4c43f8e1736a2b7654595dfe6c175b4b3b;p=lyx.git diff --git a/src/support/lyxlib.h b/src/support/lyxlib.h index 8554ca0ec8..23894ee2eb 100644 --- a/src/support/lyxlib.h +++ b/src/support/lyxlib.h @@ -1,75 +1,60 @@ // -*- C++ -*- -/* This file is part of - * ====================================================== - * - * LyX, The Document Processor - * - * Copyright 1995 Matthias Ettrich - * Copyright 1995-2001 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" +// always include (also with MSVC), to avoid compiler specific side effects +#include -// 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)? +#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 -// Use a namespace if we can, a struct otherwise namespace lyx { +namespace support { -/// -string const getcwd(); -/// -int chdir(string const & name); -/// Returns false if it fails -bool rename(string const & from, string const & to); -/// Returns false it it fails -bool copy(string const & from, string const & to); -/// generates a checksum -unsigned long sum(string const & file); -/// returns a date string (not used currently) -char * date(); -/// returns the name of the user (not used currently) -string const getUserName(); -/// +/// FIXME: some point to this hmm ? int kill(int pid, int sig); -/// -void abort(); -/// -int mkdir(string const & pathname, unsigned long int mode); -/// -int putenv(char const * str); -/// -int unlink(string const & file); -/// -int rmdir(string const & file); -/// -int atoi(string const & nstr); -/// -string const tempName(string const & dir = string(), - string const & mask = string()); - -/** Returns true if var is approximately equal to number with allowed error +/** + * Returns true if var is approximately equal to number with allowed error * of 'error'. * - * Reason: A float can be very close to the number, yet still need not be - * exactly equal, you can have exp(-10) which is very close to zero but not - * zero. If you only need an approximate equality (you usually do), use this - * template. - * * 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(float var, float number, float error) +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 */