summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2016-03-23 21:57:41 +0100
committerBent Bisballe Nyeng <deva@aasimon.org>2016-03-31 21:03:08 +0200
commit45521d593560b120d406acfb9926697e7ad5e423 (patch)
tree4d25de9d5aa29a029ac46e3bc6551a32491f8ea8
parentd172d756cfcdfbde5c6b8c6d25a51f58624739e6 (diff)
More cleanup.
-rw-r--r--src/drumkit.cc24
-rw-r--r--src/drumkit.h1
-rw-r--r--src/drumkitparser.cc30
-rw-r--r--src/instrumentparser.cc56
-rw-r--r--src/instrumentparser.h2
-rw-r--r--src/midimapparser.cc3
-rw-r--r--src/midimapparser.h2
-rw-r--r--src/path.cc18
-rw-r--r--src/path.h1
-rw-r--r--src/sample.cc21
-rw-r--r--src/sample.h11
-rw-r--r--src/saxparser.cc66
-rw-r--r--src/saxparser.h19
13 files changed, 113 insertions, 141 deletions
diff --git a/src/drumkit.cc b/src/drumkit.cc
index 1b95c87..f25a6ea 100644
--- a/src/drumkit.cc
+++ b/src/drumkit.cc
@@ -39,12 +39,11 @@ DrumKit::~DrumKit()
void DrumKit::clear()
{
- Instruments::iterator i = instruments.begin();
- while(i != instruments.end())
+ for(auto& instrument : instruments)
{
- delete *i;
- i++;
+ delete instrument;
}
+
instruments.clear();
channels.clear();
@@ -78,20 +77,3 @@ size_t DrumKit::getSamplerate() const
{
return _samplerate;
}
-
-#ifdef TEST_DRUMKIT
-// Additional dependency files
-// deps:
-// Required cflags (autoconf vars may be used)
-// cflags:
-// Required link options (autoconf vars may be used)
-// libs:
-#include "test.h"
-
-TEST_BEGIN;
-
-// TODO: Put some testcode here (see test.h for usable macros).
-
-TEST_END;
-
-#endif /*TEST_DRUMKIT*/
diff --git a/src/drumkit.h b/src/drumkit.h
index 1ceef3e..a6913c0 100644
--- a/src/drumkit.h
+++ b/src/drumkit.h
@@ -33,7 +33,6 @@
#include "instrument.h"
#include "versionstr.h"
-class DrumKitParser;
class DrumKit
{
friend class DrumKitParser;
diff --git a/src/drumkitparser.cc b/src/drumkitparser.cc
index a538996..c727590 100644
--- a/src/drumkitparser.cc
+++ b/src/drumkitparser.cc
@@ -46,9 +46,9 @@ int DrumKitParser::parseFile(const std::string& filename)
if(refs.load())
{
- if(filename.size() > 1 && filename[0] == '@')
+ if((filename.size() > 1) && (filename[0] == '@'))
{
- edited_filename = refs.getValue(filename.substr(1));
+ edited_filename = refs.getValue(filename.substr(1));
}
}
else
@@ -59,7 +59,8 @@ int DrumKitParser::parseFile(const std::string& filename)
path = getPath(edited_filename);
auto result = SAXParser::parseFile(filename);
- if (result == 0) {
+ if(result == 0)
+ {
kit._file = edited_filename;
}
@@ -140,6 +141,7 @@ void DrumKitParser::startTag(const std::string& name, const attr_t& attr)
ERR(kitparser, "Missing name in instrument tag.\n");
return;
}
+
if(attr.find("file") == attr.end())
{
ERR(kitparser, "Missing file in instrument tag.\n");
@@ -180,12 +182,14 @@ void DrumKitParser::endTag(const std::string& name)
{
if(name == "instrument")
{
- Instrument* i = new Instrument();
- i->setGroup(instr_group);
- // Instrument &i = kit.instruments[kit.instruments.size() - 1];
- InstrumentParser parser(*i);
+ Instrument* instrument = new Instrument();
+ instrument->setGroup(instr_group);
+
+ InstrumentParser parser(*instrument);
parser.parseFile(path + "/" + instr_file);
- kit.instruments.push_back(i);
+
+ // Transfer ownership to the DrumKit object.
+ kit.instruments.push_back(instrument);
// Assign kit channel numbers to instruments channels.
std::vector<InstrumentChannel*>::iterator ic = parser.channellist.begin();
@@ -206,16 +210,18 @@ void DrumKitParser::endTag(const std::string& name)
c->num = kit.channels[cnt].num;
}
}
+
if(c->num == NO_CHANNEL)
{
ERR(kitparser, "Missing channel '%s' in instrument '%s'\n",
c->name.c_str(), i->getName().c_str());
}
- else {
+ else
+ {
/*
- DEBUG(kitparser, "Assigned channel '%s' to number %d in instrument '%s'\n",
- c->name.c_str(), c->num, i.name().c_str());
- */
+ DEBUG(kitparser, "Assigned channel '%s' to number %d in instrument '%s'\n",
+ c->name.c_str(), c->num, i.name().c_str());
+ */
}
ic++;
}
diff --git a/src/instrumentparser.cc b/src/instrumentparser.cc
index 8bcb7a0..1e42cc3 100644
--- a/src/instrumentparser.cc
+++ b/src/instrumentparser.cc
@@ -35,8 +35,8 @@
#include "nolocale.h"
-InstrumentParser::InstrumentParser(Instrument& i)
- : instrument(i)
+InstrumentParser::InstrumentParser(Instrument& instrument)
+ : instrument(instrument)
{
}
@@ -64,10 +64,11 @@ void InstrumentParser::startTag(const std::string& name, const attr_t& attr)
if(attr.find("version") != attr.end())
{
- try {
+ try
+ {
instrument.version = VersionStr(attr.at("version"));
}
- catch(const char *err)
+ catch(const char* err)
{
ERR(instrparser, "Error parsing version number: %s, using 1.0\n", err);
instrument.version = VersionStr(1,0,0);
@@ -82,7 +83,6 @@ void InstrumentParser::startTag(const std::string& name, const attr_t& attr)
if(name == "samples")
{
-
}
if(name == "sample")
@@ -105,12 +105,12 @@ void InstrumentParser::startTag(const std::string& name, const attr_t& attr)
}
// TODO get rid of new or delete it properly
- s = new Sample(attr.at("name"), power);
+ sample = new Sample(attr.at("name"), power);
}
if(name == "audiofile")
{
- if(s == nullptr)
+ if(sample == nullptr)
{
ERR(instrparser,"Missing Sample!\n");
return;
@@ -139,18 +139,24 @@ void InstrumentParser::startTag(const std::string& name, const attr_t& attr)
}
}
- filechannel = filechannel - 1; // 1-based in file, but zero-based internally
- // TODO do those next two lines correspond with proper deletes? If not fix it.
- AudioFile *af = new AudioFile(path + "/" + attr.at("file"), filechannel);
- InstrumentChannel *ch = new InstrumentChannel(attr.at("channel"));
- channellist.push_back(ch);
- s->addAudioFile(ch, af);
- instrument.audiofiles.push_back(af);
+ filechannel = filechannel - 1; // 1-based in file but zero-based internally.
+
+ AudioFile *audio_file =
+ new AudioFile(path + "/" + attr.at("file"), filechannel);
+
+ // TODO: This is not deleted anywhere...
+ InstrumentChannel *instrument_channel =
+ new InstrumentChannel(attr.at("channel"));
+
+ channellist.push_back(instrument_channel);
+ sample->addAudioFile(instrument_channel, audio_file);
+
+ // Transfer audio_file ownership to the instrument.
+ instrument.audiofiles.push_back(audio_file);
}
if(name == "velocities")
{
-
}
if(name == "velocity")
@@ -179,19 +185,17 @@ void InstrumentParser::startTag(const std::string& name, const attr_t& attr)
return;
}
- Sample* sample = nullptr;
- std::vector<Sample *>::iterator i = instrument.samplelist.begin();
- while(i != instrument.samplelist.end())
+ Sample* sample_ref = nullptr;
+ for(auto& sample : instrument.samplelist)
{
- if((*i)->name == attr.at("name"))
+ if(sample->name == attr.at("name"))
{
- sample = *i;
+ sample_ref = sample;
break;
}
- i++;
}
- if(sample == nullptr)
+ if(sample_ref == nullptr)
{
ERR(instrparser,"Samplref pointed at non-existing sample.\n");
return;
@@ -200,7 +204,7 @@ void InstrumentParser::startTag(const std::string& name, const attr_t& attr)
if(instrument.version == VersionStr("1.0"))
{
// Old "velocity group" algorithm needs this
- instrument.addSample(lower, upper, sample);
+ instrument.addSample(lower, upper, sample_ref);
}
}
}
@@ -209,15 +213,15 @@ void InstrumentParser::endTag(const std::string& name)
{
if(name == "sample")
{
- if(s == nullptr)
+ if(sample == nullptr)
{
ERR(instrparser,"Missing Sample.\n");
return;
}
- instrument.samplelist.push_back(s);
+ instrument.samplelist.push_back(sample);
- s = nullptr;
+ sample = nullptr;
}
if(name == "instrument") {
diff --git a/src/instrumentparser.h b/src/instrumentparser.h
index 965694a..6cbaf8a 100644
--- a/src/instrumentparser.h
+++ b/src/instrumentparser.h
@@ -47,7 +47,7 @@ protected:
private:
Instrument& instrument;
- Sample* s{nullptr};
+ Sample* sample{nullptr};
std::string path;
diff --git a/src/midimapparser.cc b/src/midimapparser.cc
index ec4c10d..cc97280 100644
--- a/src/midimapparser.cc
+++ b/src/midimapparser.cc
@@ -30,7 +30,8 @@ void MidiMapParser::startTag(const std::string& name, const attr_t& attr)
{
if(name == "map")
{
- if(attr.find("note") != attr.end() && attr.find("instr") != attr.end())
+ if((attr.find("note") != attr.end()) &&
+ (attr.find("instr") != attr.end()))
{
midimap[std::stoi(attr.at("note"))] = attr.at("instr");
}
diff --git a/src/midimapparser.h b/src/midimapparser.h
index 740cb60..8ec76c0 100644
--- a/src/midimapparser.h
+++ b/src/midimapparser.h
@@ -26,8 +26,6 @@
*/
#pragma once
-#include <stdio.h>
-
#include "saxparser.h"
#include "midimapper.h"
diff --git a/src/path.cc b/src/path.cc
index 43c64f0..c2e7910 100644
--- a/src/path.cc
+++ b/src/path.cc
@@ -35,17 +35,19 @@
std::string getPath(const std::string& file)
{
- std::string p;
-#ifndef __MINGW32__
- char *b = strdup(file.c_str());
- p = dirname(b);
- free(b);
-#else
+ std::string path;
+
+#ifdef __MINGW32__
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
_splitpath(file.c_str(), drive, dir, NULL, NULL);
- p = std::string(drive) + dir;
+ path = std::string(drive) + dir;
+#else
+ // POSIX
+ char* buffer = strdup(file.c_str());
+ path = dirname(buffer);
+ free(buffer);
#endif
- return p;
+ return path;
}
diff --git a/src/path.h b/src/path.h
index 7189cea..50ff842 100644
--- a/src/path.h
+++ b/src/path.h
@@ -28,4 +28,5 @@
#include <string>
+//! \returns path component of full filename with path.
std::string getPath(const std::string& file);
diff --git a/src/sample.cc b/src/sample.cc
index 66fe3c5..ced8a47 100644
--- a/src/sample.cc
+++ b/src/sample.cc
@@ -65,24 +65,3 @@ AudioFile* Sample::getAudioFile(Channel* c)
return nullptr;
}
-
-#ifdef TEST_SAMPLE
-// deps: channel.cc audiofile.cc
-// cflags: $(SNDFILE_CFLAGS)
-// libs: $(SNDFILE_LIBS)
-#include "test.h"
-
-TEST_BEGIN;
-
-Sample s;
-InstrumentChannel c;
-InstrumentChannel c2;
-AudioFile a("test");
-
-s.addAudioFile(&c, &a);
-TEST_EQUAL(s.getAudioFile(&c), &a, "?");
-TEST_EQUAL(s.getAudioFile(&c2), nullptr, "?");
-
-TEST_END;
-
-#endif /*TEST_SAMPLE*/
diff --git a/src/sample.h b/src/sample.h
index 5b4f3b5..a3400a4 100644
--- a/src/sample.h
+++ b/src/sample.h
@@ -34,7 +34,6 @@
typedef std::map<Channel*, AudioFile*> AudioFiles;
-class InstrumentParser;
class Sample
{
friend class InstrumentParser;
@@ -53,13 +52,3 @@ private:
float power;
AudioFiles audiofiles;
};
-
-/*
- * <sample name="kick-r-1">
- * <audiofile channel="Alesis-3" file="samples/1-kick-r-Alesis-3.wav"/>
- * <audiofile channel="Amb L-3" file="samples/1-kick-r-Amb L-3.wav"/>
- * <audiofile channel="Amb R-3" file="samples/1-kick-r-Amb R-3.wav"/>
- * <audiofile channel="Kick L-3" file="samples/1-kick-r-Kick L-3.wav"/>
- * <audiofile channel="Kick R-3" file="samples/1-kick-r-Kick R-3.wav"/>
- * </sample>
- */
diff --git a/src/saxparser.cc b/src/saxparser.cc
index e32143d..280e608 100644
--- a/src/saxparser.cc
+++ b/src/saxparser.cc
@@ -26,29 +26,30 @@
*/
#include "saxparser.h"
-#include <string.h>
-#include <hugin.hpp>
#include <sstream>
#include <iostream>
+#include <hugin.hpp>
+
SAXParser::SAXParser()
{
- p = XML_ParserCreate(nullptr);
- if(!p) {
+ parser = XML_ParserCreate(nullptr);
+ if(!parser)
+ {
ERR(sax, "Couldn't allocate memory for parser\n");
// throw Exception(...); TODO
return;
}
- XML_SetUserData(p, this);
- XML_UseParserAsHandlerArg(p);
- XML_SetElementHandler(p, start_hndl, end_hndl);
- XML_SetCharacterDataHandler(p, character_hndl);
+ XML_SetUserData(parser, this);
+ XML_UseParserAsHandlerArg(parser);
+ XML_SetElementHandler(parser, SAXParser::startHandler, SAXParser::endHandler);
+ XML_SetCharacterDataHandler(parser, SAXParser::characterHandler);
}
SAXParser::~SAXParser()
{
- XML_ParserFree(p);
+ XML_ParserFree(parser);
}
int SAXParser::parseFile(const std::string& filename)
@@ -60,7 +61,8 @@ int SAXParser::parseFile(const std::string& filename)
std::ifstream file(filename, std::ifstream::in);
- if(!file.is_open()) {
+ if(!file.is_open())
+ {
return 1;
}
@@ -68,59 +70,63 @@ int SAXParser::parseFile(const std::string& filename)
ss << file.rdbuf();
std::string str = ss.str();
- parseString(str, filename);
-
- return 0;
+ return parseString(str, filename);
}
-int SAXParser::parseString(const std::string& str, const std::string& xml_source_name)
+int SAXParser::parseString(const std::string& str,
+ const std::string& xml_source_name)
{
DEBUG(sax, "parse(buffer %d bytes)\n", (int)str.length());
- if(!XML_Parse(p, str.c_str(), str.length(), true)) {
- parseError(str, XML_ErrorString(XML_GetErrorCode(p)),
- xml_source_name, (int)XML_GetCurrentLineNumber(p));
+ if(!XML_Parse(parser, str.c_str(), str.length(), true))
+ {
+ parseError(str, XML_ErrorString(XML_GetErrorCode(parser)),
+ xml_source_name, (int)XML_GetCurrentLineNumber(parser));
return 1;
}
return 0;
}
-void SAXParser::parseError(const std::string& buf, const std::string& error, const std::string& xml_source_name, std::size_t lineno)
+void SAXParser::parseError(const std::string& buf, const std::string& error,
+ const std::string& xml_source_name,
+ std::size_t lineno)
{
- std::cerr << "SAXParser error trying to parse from source: " << xml_source_name << "\n";
+ std::cerr << "SAXParser error trying to parse from source: " <<
+ xml_source_name << "\n";
std::cerr << "At line " << lineno << ": " << error << "\n";
std::cerr << "Buffer " << buf.size() << " bytes: \n[\n";
std::cerr << buf;
std::cerr << "\n]" << std::endl;
}
-void SAXParser::character_hndl(void* p, const XML_Char* s, int len)
+void SAXParser::characterHandler(void* parser, const XML_Char* cData, int len)
{
- SAXParser* parser = (SAXParser*)XML_GetUserData(p);
- std::string chars(s, len);
- parser->characterData(chars);
+ SAXParser* sax_parser = (SAXParser*)XML_GetUserData(parser);
+ std::string chars(cData, len);
+ sax_parser->characterData(chars);
}
-void SAXParser::start_hndl(void* p, const char* el, const char** attr)
+void SAXParser::startHandler(void* parser, const char* el, const char** attr)
{
- SAXParser* parser = (SAXParser*)XML_GetUserData(p);
+ SAXParser* sax_parser = (SAXParser*)XML_GetUserData(parser);
// Convert to comfy C++ values...
attr_t attributes;
- while(*attr) {
+ while(*attr)
+ {
std::string at_name = *attr++;
std::string at_value = *attr++;
attributes.emplace(at_name, at_value);
}
- parser->startTag(std::string(el), attributes);
+ sax_parser->startTag(std::string(el), attributes);
}
-void SAXParser::end_hndl(void* p, const char* el)
+void SAXParser::endHandler(void* parser, const char* el)
{
- SAXParser* parser = (SAXParser*)XML_GetUserData(p);
- parser->endTag(std::string(el));
+ SAXParser* sax_parser = (SAXParser*)XML_GetUserData(parser);
+ sax_parser->endTag(std::string(el));
}
diff --git a/src/saxparser.h b/src/saxparser.h
index 92197d1..4b1a273 100644
--- a/src/saxparser.h
+++ b/src/saxparser.h
@@ -31,7 +31,8 @@
#include <expat.h>
#include <fstream>
-class SAXParser {
+class SAXParser
+{
public:
SAXParser();
virtual ~SAXParser();
@@ -40,7 +41,8 @@ public:
virtual int parseFile(const std::string& filename);
//! Parses all the data in the buffer.
- virtual int parseString(const std::string& str, const std::string& xml_source_name = "");
+ virtual int parseString(const std::string& str,
+ const std::string& xml_source_name = "");
protected:
using attr_t = std::unordered_map<std::string, std::string>;
@@ -48,13 +50,16 @@ protected:
virtual void characterData(const std::string& data) {}
virtual void startTag(const std::string& name, const attr_t& attr) {}
virtual void endTag(const std::string& name) {}
- virtual void parseError(const std::string& buf, const std::string& error, const std::string& xml_source_name, std::size_t lineno);
+ virtual void parseError(const std::string& buf,
+ const std::string& error,
+ const std::string& xml_source_name,
+ std::size_t lineno);
private:
- XML_Parser p;
+ XML_Parser parser;
std::string filename;
- static void character_hndl(void* p, const XML_Char* s, int len);
- static void start_hndl(void* p, const char* el, const char** attr);
- static void end_hndl(void* p, const char* el);
+ static void characterHandler(void* parser, const XML_Char* cData, int len);
+ static void startHandler(void* parser, const char* el, const char** attr);
+ static void endHandler(void* parser, const char* el);
};