annotate base/BaseTypes.h @ 1879:652c5360e682

Ensure transforms are populated before instantiateDefaultPluginFor runs - otherwise if we have prior knowledge of a transform id, we can find ourselves trying to instantiate it before the plugin factory has heard of it and e.g. knows which server to use
author Chris Cannam
date Thu, 25 Jun 2020 12:20:06 +0100
parents 895186c43fce
children
rev   line source
Chris@1051 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@1051 2
Chris@1051 3 /*
Chris@1051 4 Sonic Visualiser
Chris@1051 5 An audio file viewer and annotation editor.
Chris@1051 6 Centre for Digital Music, Queen Mary, University of London.
Chris@1051 7
Chris@1051 8 This program is free software; you can redistribute it and/or
Chris@1051 9 modify it under the terms of the GNU General Public License as
Chris@1051 10 published by the Free Software Foundation; either version 2 of the
Chris@1051 11 License, or (at your option) any later version. See the file
Chris@1051 12 COPYING included with this distribution for more information.
Chris@1051 13 */
Chris@1049 14
Chris@1528 15 #ifndef SV_BASE_TYPES_H
Chris@1528 16 #define SV_BASE_TYPES_H
Chris@1049 17
Chris@1049 18 #include <cstdint>
Chris@1326 19 #include <complex>
Chris@1326 20 #include <vector>
Chris@1326 21
Chris@1326 22 #include <bqvec/Allocators.h>
Chris@1049 23
Chris@1051 24 /** Frame index, the unit of our time axis. This is signed because the
Chris@1051 25 axis conceptually extends below zero: zero represents the start of
Chris@1051 26 the main loaded audio model, not the start of time; a windowed
Chris@1051 27 transform could legitimately produce results before then. We also
Chris@1051 28 use this for frame counts, simply to avoid error-prone arithmetic
Chris@1051 29 between signed and unsigned types.
Chris@1051 30 */
Chris@1049 31 typedef int64_t sv_frame_t;
Chris@1049 32
Chris@1051 33 /** Check whether an integer index is in range for a container,
Chris@1051 34 avoiding overflows and signed/unsigned comparison warnings.
Chris@1051 35 */
Chris@1049 36 template<typename T, typename C>
Chris@1049 37 bool in_range_for(const C &container, T i)
Chris@1049 38 {
Chris@1049 39 if (i < 0) return false;
Chris@1049 40 if (sizeof(T) > sizeof(typename C::size_type)) {
Chris@1429 41 return i < static_cast<T>(container.size());
Chris@1049 42 } else {
Chris@1429 43 return static_cast<typename C::size_type>(i) < container.size();
Chris@1049 44 }
Chris@1049 45 }
Chris@1049 46
Chris@1051 47 /** Sample rate. We have to deal with sample rates provided as float
Chris@1051 48 or (unsigned) int types, so we might as well have a type that can
Chris@1051 49 represent both. Storage size isn't an issue anyway.
Chris@1051 50 */
Chris@1051 51 typedef double sv_samplerate_t;
Chris@1051 52
Chris@1326 53 typedef std::vector<float, breakfastquay::StlAllocator<float>> floatvec_t;
Chris@1326 54
Chris@1326 55 typedef std::vector<std::complex<float>,
Chris@1326 56 breakfastquay::StlAllocator<std::complex<float>>> complexvec_t;
Chris@1326 57
Chris@1626 58 typedef uint64_t sv_id_t;
Chris@1626 59
Chris@1626 60 enum {
Chris@1626 61 ID_NOTHING = 0
Chris@1626 62 };
Chris@1626 63
Chris@1049 64 #endif
Chris@1051 65