]> git.lyx.org Git - lyx.git/blobdiff - src/support/lyxlib.h
prepare Qt 5.6 builds
[lyx.git] / src / support / lyxlib.h
index 4f955a44868b34b0c29aea9702be94f176d979fd..23894ee2ebea1d47d077ca3344ada70edd32e89f 100644 (file)
 // -*- C++ -*-
-/* This file is part of
- * ====================================================== 
- * 
- *           LyX, The Document Processor
- *        
- *           Copyright 1995 Matthias Ettrich
- *           Copyright 1995-2000 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"
-#include <sys/types.h>
+// always include <math.h> (also with MSVC), to avoid compiler specific side effects
+#include <math.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)?
+#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
 
-// This should have been a namespace
-#ifdef CXX_WORKING_NAMESPACES
-///
 namespace lyx {
-       ///
-       char * getcwd(char * buffer, size_t size);
-       ///
-       int chdir(char const * name);
-        ///
-        int chdir(string const & name);
-       /// Returns false it it fails
-       bool rename(char const * from, char const * to);
-        /// 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(char const * file);
-       /// 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();
-       ///
-       int kill(int pid, int sig);
-       ///
-       void abort();
-        ///
-        int mkdir(string const & pathname, mode_t mode);
-       ///
-       int putenv(char const * str);
-        ///
-        int unlink(string const & file);
-        ///
-        int rmdir(string const & file);
-        ///
-        int atoi(string const & nstr);
+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);
 }
-#else
-///
-struct lyx {
-       ///
-       static char * getcwd(char * buffer, size_t size);
-       ///
-       static int chdir(char const * name);
-       ///
-       static int chdir(string const & name);
-       /// Returns false it it fails
-       static bool rename(char const * from, char const * to);
-        /// Returns false if it fails
-        static bool rename(string const & from, string const & to);
-       /// Returns false it it fails
-       static bool copy(string const & from, string const & to);
-       /// generates a checksum
-       static unsigned long sum(char const * file);
-       /// generates a checksum
-       static unsigned long sum(string const & file);
-       /// returns a date string (not used currently)
-       static char * date(); 
-       /// returns the name of the user (not used currently)
-       static string const getUserName();
-       ///
-       static int kill(int pid, int sig);
-       ///
-       static void abort();
-       ///
-       static int mkdir(string const & pathname, unsigned long int mode);
-       ///
-       static int putenv(char const * str);
-        ///
-        static int unlink(string const & file);
-        ///
-        static int rmdir(string const & file);
-        ///
-        static int atoi(string const & nstr);
-};
-#endif // CXX_WORKING_NAMESPACES
-#endif
+
+/// round \p x to nearest integer
+inline int iround(double x)
+{
+       return static_cast<int>(round(x));
+}
+
+} // namespace support
+} // namespace lyx
+
+#endif /* LYX_LIB_H */