aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMax Horn2003-06-15 11:48:04 +0000
committerMax Horn2003-06-15 11:48:04 +0000
commit0d85cd1ee6af891d4ef33a355324b36c13ca02c3 (patch)
tree72a92f36951fb9b02c5678caf858aca1e5fa8792
parentb8b80805c17b5865f63394659f9907cf5b1690ec (diff)
downloadscummvm-rg350-0d85cd1ee6af891d4ef33a355324b36c13ca02c3.tar.gz
scummvm-rg350-0d85cd1ee6af891d4ef33a355324b36c13ca02c3.tar.bz2
scummvm-rg350-0d85cd1ee6af891d4ef33a355324b36c13ca02c3.zip
small reorg (keep private classes out of header files, if possible -> decreases compile times a bit); fixed a small memory leak for Simon2mac; don't delete _file twice in Sound subclasses
svn-id: r8506
-rw-r--r--simon/sound.cpp51
-rw-r--r--simon/sound.h37
2 files changed, 42 insertions, 46 deletions
diff --git a/simon/sound.cpp b/simon/sound.cpp
index c9750d3451..69dbde3aa9 100644
--- a/simon/sound.cpp
+++ b/simon/sound.cpp
@@ -22,6 +22,39 @@
#include "common/file.h"
#include "common/engine.h"
+class Sound {
+protected:
+ File *_file;
+ uint32 *_offsets;
+ SoundMixer *_mixer;
+
+public:
+ Sound(SoundMixer *mixer, File *file, uint32 base = 0);
+ Sound(SoundMixer *mixer, File *file, uint32 *offsets);
+ virtual ~Sound() { delete _file; }
+ virtual int playSound(uint sound, PlayingSoundHandle *handle, byte flags = 0) = 0;
+};
+
+class WavSound : public Sound {
+public:
+ WavSound(SoundMixer *mixer, File *file, uint32 base = 0) : Sound(mixer, file, base) {};
+ WavSound(SoundMixer *mixer, File *file, uint32 *offsets) : Sound(mixer, file, offsets) {};
+ int playSound(uint sound, PlayingSoundHandle *handle, byte flags = 0);
+};
+
+class VocSound : public Sound {
+public:
+ VocSound(SoundMixer *mixer, File *file, uint32 base = 0) : Sound(mixer, file, base) {};
+ int playSound(uint sound, PlayingSoundHandle *handle, byte flags = 0);
+};
+
+class MP3Sound : public Sound {
+public:
+ MP3Sound(SoundMixer *mixer, File *file, uint32 base = 0) : Sound(mixer, file, base) {};
+ int playSound(uint sound, PlayingSoundHandle *handle, byte flags = 0);
+};
+
+
SimonSound::SimonSound(const byte game, const GameSpecificSettings *gss, const char *gameDataPath, SoundMixer *mixer) {
_game = game;
_gameDataPath = gameDataPath;
@@ -47,7 +80,6 @@ SimonSound::SimonSound(const byte game, const GameSpecificSettings *gss, const c
_ambient_playing = 0;
File *file = new File();
- File *file2 = new File();
const char *s;
#ifdef USE_MAD
@@ -59,6 +91,7 @@ SimonSound::SimonSound(const byte game, const GameSpecificSettings *gss, const c
file->open("voices.idx", gameDataPath);
if (file->isOpen() == false) {
warning("Can't open voice index file 'voices.idx'");
+ delete file;
} else {
file->seek(0, SEEK_END);
int end = file->pos();
@@ -99,6 +132,7 @@ SimonSound::SimonSound(const byte game, const GameSpecificSettings *gss, const c
#endif
if (_game == GAME_SIMON1TALKIE) {
+ File *file2 = new File();
#ifdef USE_MAD
file2->open(gss->mp3_effects_filename, gameDataPath);
if (file2->isOpen() == false) {
@@ -229,7 +263,7 @@ void SimonSound::ambientPause(bool b) {
/******************************************************************************/
-SimonSound::Sound::Sound(SoundMixer *mixer, File *file, uint32 base) {
+Sound::Sound(SoundMixer *mixer, File *file, uint32 base) {
_mixer = mixer;
_file = file;
@@ -260,17 +294,12 @@ SimonSound::Sound::Sound(SoundMixer *mixer, File *file, uint32 base) {
_offsets[res] = _file->pos();
}
-SimonSound::Sound::Sound(SoundMixer *mixer, File *file, uint32 *offsets) {
+Sound::Sound(SoundMixer *mixer, File *file, uint32 *offsets) {
_mixer = mixer;
_file = file;
_offsets = offsets;
}
-SimonSound::Sound::~Sound() { delete _file; }
-SimonSound::WavSound::~WavSound() { delete _file; }
-SimonSound::VocSound::~VocSound() { delete _file; }
-SimonSound::MP3Sound::~MP3Sound() { delete _file; }
-
#if !defined(__GNUC__)
#pragma START_PACK_STRUCTS
#endif
@@ -311,7 +340,7 @@ struct VocBlockHeader {
#endif
#ifdef USE_MAD
-int SimonSound::MP3Sound::playSound(uint sound, PlayingSoundHandle *handle, byte flags)
+int MP3Sound::playSound(uint sound, PlayingSoundHandle *handle, byte flags)
{
if (_offsets == NULL)
return 0;
@@ -329,7 +358,7 @@ int SimonSound::MP3Sound::playSound(uint sound, PlayingSoundHandle *handle, byte
}
#endif
-int SimonSound::VocSound::playSound(uint sound, PlayingSoundHandle *handle, byte flags) {
+int VocSound::playSound(uint sound, PlayingSoundHandle *handle, byte flags) {
if (_offsets == NULL)
return 0;
@@ -367,7 +396,7 @@ int SimonSound::VocSound::playSound(uint sound, PlayingSoundHandle *handle, byte
return _mixer->playRaw(handle, buffer, size, samples_per_sec, flags);
}
-int SimonSound::WavSound::playSound(uint sound, PlayingSoundHandle *handle, byte flags) {
+int WavSound::playSound(uint sound, PlayingSoundHandle *handle, byte flags) {
if (_offsets == NULL)
return 0;
diff --git a/simon/sound.h b/simon/sound.h
index 40bce72735..e17a331c14 100644
--- a/simon/sound.h
+++ b/simon/sound.h
@@ -20,43 +20,10 @@
#include "sound/mixer.h"
#include "simon/intern.h"
+class Sound;
+
class SimonSound {
private:
- class Sound {
- protected:
- File *_file;
- uint32 *_offsets;
- SoundMixer *_mixer;
-
- public:
- Sound(SoundMixer *mixer, File *file, uint32 base = 0);
- Sound(SoundMixer *mixer, File *file, uint32 *offsets);
- virtual ~Sound();
- virtual int playSound(uint sound, PlayingSoundHandle *handle, byte flags = 0) = 0;
- };
-
- class WavSound : public Sound {
- public:
- WavSound(SoundMixer *mixer, File *file, uint32 base = 0) : Sound(mixer, file, base) {};
- WavSound(SoundMixer *mixer, File *file, uint32 *offsets) : Sound(mixer, file, offsets) {};
- ~WavSound();
- int playSound(uint sound, PlayingSoundHandle *handle, byte flags = 0);
- };
-
- class VocSound : public Sound {
- public:
- VocSound(SoundMixer *mixer, File *file, uint32 base = 0) : Sound(mixer, file, base) {};
- ~VocSound();
- int playSound(uint sound, PlayingSoundHandle *handle, byte flags = 0);
- };
-
- class MP3Sound : public Sound {
- public:
- MP3Sound(SoundMixer *mixer, File *file, uint32 base = 0) : Sound(mixer, file, base) {};
- ~MP3Sound();
- int playSound(uint sound, PlayingSoundHandle *handle, byte flags = 0);
- };
-
byte _game;
const char *_gameDataPath;