Audacity 3.2.0
Classes | Macros | Typedefs | Functions
MemoryX.h File Reference
#include <iterator>
#include <memory>
#include <new>
#include <cstdlib>
#include <functional>
#include <limits>
#include <algorithm>
Include dependency graph for MemoryX.h:

Go to the source code of this file.

Classes

class  ArrayOf< X >
 This simplifies arrays of arrays, each array separately allocated with NEW[] But it might be better to use std::Array<ArrayOf<X>, N> for some small constant N Or use just one array when sub-arrays have a common size and are not large. More...
 
class  ArraysOf< X >
 
struct  freer
 
struct  Destroyer< T >
 A deleter class to supply the second template parameter of unique_ptr for classes like wxWindow that should be sent a message called Destroy rather than be deleted directly. More...
 
struct  Finally< F >
 "finally" as in The C++ Programming Language, 4th ed., p. 358 Useful for defining ad-hoc RAII actions. typical usage: auto cleanup = finally([&]{ ... code; ... }); More...
 
struct  RestoreValue< T >
 Structure used by ValueRestorer. More...
 
class  ValueRestorer< T >
 Set a variable temporarily in a scope. More...
 
struct  CopyableValueRestorer< T >
 
struct  ValueIterator< Value, Category >
 A convenience for defining iterators that return rvalue types, so that they cooperate correctly with stl algorithms and std::reverse_iterator. More...
 
struct  IteratorRange< Iterator >
 A convenience for use with range-for. More...
 
struct  IteratorRange< Iterator >::identity< T >
 
struct  SharedNonInterfering< T >
 Workaround for std::make_shared not working on macOs with over-alignment. More...
 
struct  NonInterfering< T >
 
struct  AtomicUniquePointer< T >
 

Macros

#define safenew   new
 
#define QUANTIZED_TIME(time, rate)   (floor(((double)(time) * (rate)) + 0.5) / (rate))
 
#define DB_TO_LINEAR(x)   (pow(10.0, (x) / 20.0))
 
#define LINEAR_TO_DB(x)   (20.0 * log10(x))
 
#define MAX_AUDIO   (1. - 1./(1<<15))
 

Typedefs

template<typename T >
using MallocPtr = std::unique_ptr< T, freer >
 
template<typename Character = char>
using MallocString = std::unique_ptr< Character[], freer >
 
template<typename T >
using Destroy_ptr = std::unique_ptr< T, Destroyer< T > >
 a convenience for using Destroyer More...
 

Functions

template<typename F >
Finally< F > finally (F f)
 Function template with type deduction lets you construct Finally without typing any angle brackets. More...
 
template<typename F >
 Finally (F) -> Finally< F >
 
template<typename T >
ValueRestorer< T > valueRestorer (T &var)
 inline functions provide convenient parameter type deduction More...
 
template<typename T >
ValueRestorer< T > valueRestorer (T &var, const T &newValue)
 
template<typename Iterator >
IteratorRange< Iterator > make_iterator_range (const Iterator &i1, const Iterator &i2)
 
template<typename Container >
IteratorRange< typename Container::iterator > make_iterator_range (Container &container)
 
template<typename Container >
IteratorRange< typename Container::const_iterator > make_iterator_range (const Container &container)
 
template<typename Container , typename Iterator , typename Function >
Container transform_range (Iterator first, Iterator last, Function &&fn)
 
template<typename OutContainer , typename InContainer , typename Function >
OutContainer transform_container (InContainer &inContainer, Function &&fn)
 
struct UTILITY_API alignas (64) NonInterferingBase
 Non-template helper for class template NonInterfering. More...
 

Macro Definition Documentation

◆ DB_TO_LINEAR

#define DB_TO_LINEAR (   x)    (pow(10.0, (x) / 20.0))

Definition at line 561 of file MemoryX.h.

◆ LINEAR_TO_DB

#define LINEAR_TO_DB (   x)    (20.0 * log10(x))

Definition at line 562 of file MemoryX.h.

◆ MAX_AUDIO

#define MAX_AUDIO   (1. - 1./(1<<15))

Definition at line 564 of file MemoryX.h.

◆ QUANTIZED_TIME

#define QUANTIZED_TIME (   time,
  rate 
)    (floor(((double)(time) * (rate)) + 0.5) / (rate))

Definition at line 559 of file MemoryX.h.

◆ safenew

#define safenew   new

Definition at line 10 of file MemoryX.h.

Typedef Documentation

◆ Destroy_ptr

template<typename T >
using Destroy_ptr = std::unique_ptr<T, Destroyer<T> >

a convenience for using Destroyer

Definition at line 162 of file MemoryX.h.

◆ MallocPtr

template<typename T >
using MallocPtr = std::unique_ptr< T, freer >

A useful alias for holding the result of malloc

Definition at line 140 of file MemoryX.h.

◆ MallocString

template<typename Character = char>
using MallocString = std::unique_ptr< Character[], freer >

A useful alias for holding the result of strup and similar

Definition at line 146 of file MemoryX.h.

Function Documentation

◆ alignas()

struct UTILITY_API alignas ( 64  )

Non-template helper for class template NonInterfering.

If a structure contains any members with large alignment, this base class may also allow it to work in macOS builds under current limitations of the C++17 standard implementation.

Definition at line 488 of file MemoryX.h.

498 {
499 static void *operator new(std::size_t count, std::align_val_t al);
500 static void operator delete(void *ptr, std::align_val_t al);
501
502#if defined (_MSC_VER) && defined(_DEBUG)
503 // Versions that work in the presence of the DEBUG_NEW macro.
504 // Ignore the arguments supplied by the macro and forward to the
505 // other overloads.
506 static void *operator new(
507 std::size_t count, std::align_val_t al, int, const char *, int)
508 { return operator new(count, al); }
509 static void operator delete(
510 void *ptr, std::align_val_t al, int, const char *, int)
511 { return operator delete(ptr, al); }
512#endif
513};

◆ finally()

template<typename F >
Finally< F > finally ( f)

Function template with type deduction lets you construct Finally without typing any angle brackets.

Definition at line 182 of file MemoryX.h.

183{
184 return Finally<F>(f);
185}
"finally" as in The C++ Programming Language, 4th ed., p. 358 Useful for defining ad-hoc RAII actions...
Definition: MemoryX.h:173

◆ Finally()

template<typename F >
Finally ( ) -> Finally< F >

C++17 deduction guide allows even simpler syntax: Finally Do{[&]{ Stuff(); }};

Don't omit Do or some other variable name! Otherwise, the execution of the body is immediate, not delayed to the end of the enclosing scope.

◆ make_iterator_range() [1/3]

template<typename Container >
IteratorRange< typename Container::const_iterator > make_iterator_range ( const Container &  container)

Definition at line 462 of file MemoryX.h.

463{
464 return { container.begin(), container.end() };
465}

◆ make_iterator_range() [2/3]

template<typename Iterator >
IteratorRange< Iterator > make_iterator_range ( const Iterator &  i1,
const Iterator &  i2 
)

Definition at line 448 of file MemoryX.h.

449{
450 return { i1, i2 };
451}

Referenced by ShuttleGuiBase::AddChoice(), AudioIO::AllocateBuffers(), ChoiceEditor::BeginEdit(), PluginManager::CheckPluginUpdates(), ExportFFmpegOptions::FetchCompatibleCodecList(), AudioSetupToolBar::FillHosts(), DeviceToolBar::FillHosts(), AudioSetupToolBar::Choices::Find(), ExportFFmpegOptions::FindSelectedCodec(), ExportFFmpegOptions::FindSelectedFormat(), AudioIO::GetBestRate(), CommandManager::GetCategories(), DevicePrefs::GetNamesAndLabels(), AudioIOBase::GetOptimalSupportedSampleRate(), PluginManager::GetPlugin(), AudioIOBase::GetSupportedCaptureRates(), AudioIOBase::GetSupportedPlaybackRates(), AudioIOBase::GetSupportedSampleRates(), MP3ExportProcessor::Initialize(), MacroCommands::IsFixed(), LangChoiceDialog::LangChoiceDialog(), Effect::LoadSettingsFromString(), MacroCommands::MacroCommands(), LabelDialog::OnChangeTrack(), LabelDialog::OnInsert(), LangChoiceDialog::OnOk(), EffectUIHost::OnSaveAs(), KeyConfigPrefs::OnSet(), LabelTrackMenuTable::OnSetFont(), NyquistEffect::Parse(), ModuleManager::Providers(), ChoiceEditor::Reset(), AudioSetupToolBar::Choices::Set(), KeyConfigPrefs::SetKeyForSelected(), ShuttleGuiBase::TieChoice(), ShuttleGuiBase::TieNumberAsChoice(), NyquistEffect::Tokenizer::Tokenize(), ShuttleGuiBase::TranslateToIndex(), and OptionValidator::Validate().

Here is the caller graph for this function:

◆ make_iterator_range() [3/3]

template<typename Container >
IteratorRange< typename Container::iterator > make_iterator_range ( Container &  container)

Definition at line 455 of file MemoryX.h.

456{
457 return { container.begin(), container.end() };
458}

◆ transform_container()

template<typename OutContainer , typename InContainer , typename Function >
OutContainer transform_container ( InContainer &  inContainer,
Function &&  fn 
)

Definition at line 477 of file MemoryX.h.

478{
479 return transform_range<OutContainer>(
480 inContainer.begin(), inContainer.end(), fn );
481}
static const auto fn

References fn.

◆ transform_range()

template<typename Container , typename Iterator , typename Function >
Container transform_range ( Iterator  first,
Iterator  last,
Function &&  fn 
)

Definition at line 469 of file MemoryX.h.

470{
471 Container result;
472 std::transform( first, last, std::back_inserter( result ), fn );
473 return result;
474}

References fn.

◆ valueRestorer() [1/2]

template<typename T >
ValueRestorer< T > valueRestorer ( T &  var)

inline functions provide convenient parameter type deduction

Definition at line 251 of file MemoryX.h.

252{ return ValueRestorer< T >{ var }; }
Set a variable temporarily in a scope.
Definition: MemoryX.h:212

Referenced by MacroCommands::ApplyMacro(), AudacityCommand::DoAudacityCommand(), EffectBase::DoEffect(), EffectPreview(), MenuCreator::FilterKeyEvent(), Importer::Import(), EffectNoiseReduction::Dialog::OnPreview(), NyquistEffect::Process(), VSTInstance::RealtimeInitialize(), and AudacityCommand::ShowInterface().

Here is the caller graph for this function:

◆ valueRestorer() [2/2]

template<typename T >
ValueRestorer< T > valueRestorer ( T &  var,
const T &  newValue 
)

Definition at line 255 of file MemoryX.h.

256{ return ValueRestorer< T >{ var, newValue }; }