summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2016-05-21 18:00:42 +0200
committerBent Bisballe Nyeng <deva@aasimon.org>2016-05-21 18:00:42 +0200
commit6a12513e42e7fbd5883bf2c9f55defe24f802ed1 (patch)
tree67e8848f695492b2aeea8cd213ba00dacd83c2e5 /src
parentfc041fd9566acb756b2d3b7b36ba963ccb00c388 (diff)
Experimental new platform detection code used in memchecker.
Diffstat (limited to 'src')
-rw-r--r--src/memchecker.cc25
-rw-r--r--src/platform.h60
2 files changed, 75 insertions, 10 deletions
diff --git a/src/memchecker.cc b/src/memchecker.cc
index 1110e69..81c9da7 100644
--- a/src/memchecker.cc
+++ b/src/memchecker.cc
@@ -26,12 +26,12 @@
*/
#include "memchecker.h"
-#ifdef WIN32
-#define WIN32_LEAN_AND_MEAN
-#include <windows.h>
-#else
+#include "platform.h"
+
+#if DG_PLATFORM == DG_PLATFORM_LINUX
#include <sys/sysinfo.h>
#endif
+
#include <sndfile.h>
#include <hugin.hpp>
@@ -48,15 +48,19 @@ uint64_t MemChecker::calcFreeMemory() const
uint64_t free_memory = 0;
// Platform specific calculation of the amount of free memory.
-#ifdef WIN32
+#if DG_PLATFORM == DG_PLATFORM_LINUX
+ struct sysinfo sys_info;
+ sysinfo(&sys_info);
+ free_memory = sys_info.freeram * sys_info.mem_unit;
+#elif DG_PLATFORM == DG_PLATFORM_WINDOWS
MEMORYSTATUSEX status;
status.dwLength = sizeof(status);
GlobalMemoryStatusEx(&status);
free_memory = status.ullAvailPhys;
-#else
- struct sysinfo sys_info;
- sysinfo(&sys_info);
- free_memory = sys_info.freeram * sys_info.mem_unit;
+#elif DG_PLATFORM == DG_PLATFORM_OSX
+ // TODO
+#elif DG_PLATFORM == DG_PLATFORM_UNIX
+ // TODO
#endif
DEBUG(memchecker, "Calculated %" PRIu64 " free memory.\n", free_memory);
@@ -92,7 +96,8 @@ uint64_t MemChecker::calcBytesPerChannel(const std::string& filename) const
SNDFILE* f = sf_open(filename.c_str(), SFM_READ, &sf_info);
if(!f)
{
- ERR(memchecker, "SNDFILE Error (%s): %s\n", filename.c_str(), sf_strerror(f));
+ ERR(memchecker, "SNDFILE Error (%s): %s\n",
+ filename.c_str(), sf_strerror(f));
return 0;
}
diff --git a/src/platform.h b/src/platform.h
new file mode 100644
index 0000000..0357f15
--- /dev/null
+++ b/src/platform.h
@@ -0,0 +1,60 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/***************************************************************************
+ * platform.h
+ *
+ * Fri May 20 18:46:17 CEST 2016
+ * Copyright 2016 Bent Bisballe Nyeng
+ * deva@aasimon.org
+ ****************************************************************************/
+
+/*
+ * This file is part of DrumGizmo.
+ *
+ * DrumGizmo is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * DrumGizmo is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with DrumGizmo; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+#pragma once
+
+//! The DG platform types:
+#define DG_PLATFORM_LINUX 1 //!< Platform is Linux based.
+#define DG_PLATFORM_WINDOWS 2 //!< Platform is Windows based
+#define DG_PLATFORM_OSX 3 //!< Platform is MacOSX based.
+#define DG_PLATFORM_UNIX 4 //!< Platform is Unix based.
+
+#ifdef __linux__
+ #define DG_PLATFORM DG_PLATFORM_LINUX
+
+#elif _WIN32
+ #define DG_PLATFORM DG_PLATFORM_WINDOWS
+
+ #define WIN32_LEAN_AND_MEAN
+ #include <windows.h>
+
+#elif __APPLE__
+ #define DG_PLATFORM DG_PLATFORM_OSX
+
+#elif __unix__
+ // All other unices (*BSD etc)
+ #define DG_PLATFORM DG_PLATFORM_UNIX
+
+#endif
+
+#ifndef DG_PLATFORM
+ #error "Platform not defined!"
+#endif
+
+#if defined(_POSIX_VERSION)
+ // POSIX
+ #define DG_POSIX
+#endif