diff options
| author | Lars Muldjord <muldjordlars@gmail.com> | 2017-03-23 19:22:38 +0100 | 
|---|---|---|
| committer | Lars Muldjord <muldjordlars@gmail.com> | 2017-03-23 19:22:38 +0100 | 
| commit | 889070f5c84f67cb52a5038fe93aca6234bbc360 (patch) | |
| tree | 5c9ccdac1c8e7c13e501c89b2fbbaffa04340391 /src | |
| parent | 83745f8bf86d22936c5c2c7becc86885119f5d29 (diff) | |
| parent | 494e7218597a6cd94902b3ae6f827e74b41c00b0 (diff) | |
Merge branch 'master' of http://git.drumgizmo.org/drumgizmo
Diffstat (limited to 'src')
| -rw-r--r-- | src/Makefile.am | 3 | ||||
| -rw-r--r-- | src/bytesizeparser.cc | 103 | ||||
| -rw-r--r-- | src/bytesizeparser.h | 33 | ||||
| -rw-r--r-- | src/drumkitloader.cc | 3 | ||||
| -rw-r--r-- | src/settings.h | 13 | 
5 files changed, 150 insertions, 5 deletions
| diff --git a/src/Makefile.am b/src/Makefile.am index 2277eeb..06e189f 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -17,6 +17,7 @@ nodist_libdg_la_SOURCES = \  	audiocacheidmanager.cc \  	audioinputenginemidi.cc \  	audiofile.cc \ +	bytesizeparser.cc \  	channel.cc \  	channelmixer.cc \  	chresampler.cc \ @@ -57,6 +58,7 @@ EXTRA_DIST = \  	audioinputenginemidi.h \  	audiooutputengine.h \  	beatmapper.h \ +	bytesizeparser.h \  	channel.h \  	channelmixer.h \  	chresampler.h \ @@ -102,6 +104,7 @@ EXTRA_DIST = \  	audioinputenginemidi.cc \  	audiooutputengine.cc \  	beatmapper.cc \ +	bytesizeparser.cc \  	channel.cc \  	channelmixer.cc \  	chresampler.cc \ diff --git a/src/bytesizeparser.cc b/src/bytesizeparser.cc new file mode 100644 index 0000000..329407d --- /dev/null +++ b/src/bytesizeparser.cc @@ -0,0 +1,103 @@ +/* -*- Mode: c++ -*- */ +/*************************************************************************** + *            bytesize_parser.cc + * + *  Sat Mar  4 18:00:12 CET 2017 + *  Copyright 2017 Goran Mekić + *  meka@tilda.center + ****************************************************************************/ + +/* + *  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. + */ +#include "bytesizeparser.h" +#include <iostream> +#include <stdexcept> + + +static std::size_t suffixToSize(const char& suffix) +{ +	int size = 1; +	switch(suffix) +	{ +	case 'k': +		size <<= 10; +		break; +	case 'M': +		size <<= 20; +		break; +	case 'G': +		size <<= 30; +		break; +	default: +		size = 0; +		break; +	} +	return size; +} + + +std::size_t byteSizeParser(const std::string& argument) +{ +	std::string::size_type suffix_index; +	std::size_t stream_size; +	std::string suffix; +	bool error = false; + +	if(argument.find('-') != std::string::npos) +	{ +		error = true; +	} + +	try +	{ +		stream_size = std::stoi(argument, &suffix_index); +	} +	catch(std::invalid_argument) +	{ +		std::cerr << "Invalid argument for diskstreamsize" << std::endl; +		error = true; +	} +	catch(std::out_of_range) +	{ +		std::cerr << "Number too big. Try using bigger suffix for diskstreamsize" << std::endl; +		error = true; +	} +	if(!error) +	{ +		suffix = argument.substr(suffix_index); +		if (suffix.length() > 1) +		{ +			error = true; +		} +	} +	if(!error) +	{ +		std::size_t suffix_size = 1; +		if(suffix_index <= suffix.length()) +		{ +			suffix_size = suffixToSize(suffix[0]); + +		} +		stream_size *= suffix_size; +	} +	if(error) +	{ +		return 0; +	} +	return stream_size; +} diff --git a/src/bytesizeparser.h b/src/bytesizeparser.h new file mode 100644 index 0000000..3007454 --- /dev/null +++ b/src/bytesizeparser.h @@ -0,0 +1,33 @@ +/* -*- Mode: c++ -*- */ +/*************************************************************************** + *            bytesize_parser.h + * + *  Sat Mar  4 18:00:12 CET 2017 + *  Copyright 2017 Goran Mekić + *  meka@tilda.center + ****************************************************************************/ + +/* + *  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 +#include <string> + + +//! Returns size in bytes +//! \param argument The size in n{k,M,G} format +std::size_t byteSizeParser(const std::string& argument); diff --git a/src/drumkitloader.cc b/src/drumkitloader.cc index 1d66597..103b60c 100644 --- a/src/drumkitloader.cc +++ b/src/drumkitloader.cc @@ -201,7 +201,8 @@ void DrumKitLoader::thread_main()  		}  		bool newKit = false; -		if(getter.drumkit_file.hasChanged()) +		if(getter.drumkit_file.hasChanged() || +		   getter.reload_counter.hasChanged())  		{  			loadkit(getter.drumkit_file.getValue());  			newKit = true; diff --git a/src/settings.h b/src/settings.h index cb707ef..8a646a1 100644 --- a/src/settings.h +++ b/src/settings.h @@ -50,12 +50,13 @@ struct Settings  	Atomic<LoadStatus> drumkit_load_status{LoadStatus::Idle};  	//! The maximum amount of memory in bytes that the AudioCache -	//! is allowed to use for preloading -	//! The default std::numeric_limits<std::size_t>::max() means "unlimited" -	//Atomic<std::size_t> cache_upper_limit{std::numeric_limits<std::size_t>::max()}; -	Atomic<std::size_t> disk_cache_upper_limit{1024*1024*1024}; +	//! is allowed to use for preloading. Default is 1GB. +	Atomic<std::size_t> disk_cache_upper_limit{1024 * 1024 * 1024};  	Atomic<bool> disk_cache_enable{true}; +	//! Increment this in order to invoke a reload of the current drumkit. +	Atomic<std::size_t> reload_counter{0}; +  	Atomic<std::string> midimap_file{""};  	Atomic<LoadStatus> midimap_load_status{LoadStatus::Idle}; @@ -83,6 +84,7 @@ struct SettingsGetter  	SettingRef<std::size_t> disk_cache_upper_limit;  	SettingRef<bool> disk_cache_enable; +	SettingRef<std::size_t> reload_counter;  	SettingRef<std::string> midimap_file;  	SettingRef<LoadStatus> midimap_load_status; @@ -107,6 +109,7 @@ struct SettingsGetter  		, drumkit_load_status(settings.drumkit_load_status)  		, disk_cache_upper_limit(settings.disk_cache_upper_limit)  		, disk_cache_enable(settings.disk_cache_enable) +		, reload_counter(settings.reload_counter)  		, midimap_file(settings.midimap_file)  		, midimap_load_status(settings.midimap_load_status)  		, enable_velocity_modifier{settings.enable_velocity_modifier} @@ -132,6 +135,7 @@ public:  	Notifier<std::size_t> disk_cache_upper_limit;  	Notifier<bool> disk_cache_enable; +	Notifier<std::size_t> reload_counter;  	Notifier<std::string> midimap_file;  	Notifier<LoadStatus> midimap_load_status; @@ -160,6 +164,7 @@ public:  		EVAL(disk_cache_upper_limit);  		EVAL(disk_cache_enable); +		EVAL(reload_counter);  		EVAL(midimap_file);  		EVAL(midimap_load_status); | 
