diff base/BaseTypes.h @ 1057:5c5d4863b428 tonioni

Merge from cxx11 branch
author Chris Cannam
date Mon, 23 Mar 2015 11:26:28 +0000
parents cafd65fc411b
children d4a28d1479a8 54af1e21705c
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/base/BaseTypes.h	Mon Mar 23 11:26:28 2015 +0000
@@ -0,0 +1,50 @@
+/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
+
+/*
+    Sonic Visualiser
+    An audio file viewer and annotation editor.
+    Centre for Digital Music, Queen Mary, University of London.
+    
+    This program is free software; you can redistribute it and/or
+    modify it under the terms of the GNU General Public License as
+    published by the Free Software Foundation; either version 2 of the
+    License, or (at your option) any later version.  See the file
+    COPYING included with this distribution for more information.
+*/
+
+#ifndef BASE_TYPES_H
+#define BASE_TYPES_H
+
+#include <cstdint>
+
+/** Frame index, the unit of our time axis. This is signed because the
+    axis conceptually extends below zero: zero represents the start of
+    the main loaded audio model, not the start of time; a windowed
+    transform could legitimately produce results before then. We also
+    use this for frame counts, simply to avoid error-prone arithmetic
+    between signed and unsigned types.
+*/
+typedef int64_t sv_frame_t;
+
+/** Check whether an integer index is in range for a container,
+    avoiding overflows and signed/unsigned comparison warnings.
+*/
+template<typename T, typename C>
+bool in_range_for(const C &container, T i)
+{
+    if (i < 0) return false;
+    if (sizeof(T) > sizeof(typename C::size_type)) {
+	return i < static_cast<T>(container.size());
+    } else {
+	return static_cast<typename C::size_type>(i) < container.size();
+    }
+}
+
+/** Sample rate. We have to deal with sample rates provided as float
+    or (unsigned) int types, so we might as well have a type that can
+    represent both. Storage size isn't an issue anyway.
+*/
+typedef double sv_samplerate_t;
+
+#endif
+