Add some const qualifiers; define TrackListConstIterator

This commit is contained in:
Paul Licameli 2016-02-08 15:59:50 -05:00
parent ffe9989f7c
commit a5b6c9fd8f
23 changed files with 93 additions and 63 deletions

View File

@ -1133,7 +1133,7 @@ double LabelTrack::GetEndTime() const
return end;
}
Track *LabelTrack::Duplicate()
Track *LabelTrack::Duplicate() const
{
return new LabelTrack(*this);
}

View File

@ -139,7 +139,7 @@ class AUDACITY_DLL_API LabelTrack : public Track
virtual double GetStartTime() const;
virtual double GetEndTime() const;
virtual Track *Duplicate();
virtual Track *Duplicate() const;
virtual void SetSelected(bool s);

View File

@ -135,7 +135,7 @@ NoteTrack::~NoteTrack()
}
}
Track *NoteTrack::Duplicate()
Track *NoteTrack::Duplicate() const
{
NoteTrack *duplicate = new NoteTrack(mDirManager);
duplicate->Init(*this);

View File

@ -57,7 +57,7 @@ class AUDACITY_DLL_API NoteTrack:public Track {
NoteTrack(DirManager * projDirManager);
virtual ~NoteTrack();
virtual Track *Duplicate();
virtual Track *Duplicate() const;
virtual int GetKind() const { return Note; }

View File

@ -371,27 +371,33 @@ int Tags::GetGenre(const wxString & name)
return 255;
}
bool Tags::HasTag(const wxString & name)
bool Tags::HasTag(const wxString & name) const
{
wxString key = name;
key.UpperCase();
TagMap::iterator iter = mXref.find(key);
auto iter = mXref.find(key);
return (iter != mXref.end());
}
wxString Tags::GetTag(const wxString & name)
wxString Tags::GetTag(const wxString & name) const
{
wxString key = name;
key.UpperCase();
TagMap::iterator iter = mXref.find(key);
auto iter = mXref.find(key);
if (iter == mXref.end()) {
return wxEmptyString;
}
return mMap[iter->second];
auto iter2 = mMap.find(iter->second);
if (iter2 == mMap.end()) {
wxASSERT(false);
return wxEmptyString;
}
else
return iter2->second;
}
Tags::Iterators Tags::GetRange() const

View File

@ -97,8 +97,8 @@ class AUDACITY_DLL_API Tags: public XMLTagHandler {
wxString GetGenre(int value);
int GetGenre(const wxString & name);
bool HasTag(const wxString & name);
wxString GetTag(const wxString & name);
bool HasTag(const wxString & name) const;
wxString GetTag(const wxString & name) const;
using IterPair = std::pair<TagMap::const_iterator, TagMap::const_iterator>;
struct Iterators : public IterPair {

View File

@ -64,7 +64,7 @@ TimeTrack::TimeTrack(DirManager *projDirManager, const ZoomInfo *zoomInfo):
blankPen.SetColour(214, 214, 214);
}
TimeTrack::TimeTrack(TimeTrack &orig):
TimeTrack::TimeTrack(const TimeTrack &orig):
Track(orig)
, mZoomInfo(orig.mZoomInfo)
{
@ -109,7 +109,7 @@ TimeTrack::~TimeTrack()
delete mRuler;
}
Track *TimeTrack::Duplicate()
Track *TimeTrack::Duplicate() const
{
return new TimeTrack(*this);
}

View File

@ -35,7 +35,7 @@ class TimeTrack: public Track {
* copy-constructor to encapsulate this.
* @param orig The original track to copy from
*/
TimeTrack(TimeTrack &orig);
TimeTrack(const TimeTrack &orig);
virtual ~TimeTrack();
@ -131,7 +131,7 @@ class TimeTrack: public Track {
* @param orig the TimeTrack to copy from
*/
void Init(const TimeTrack &orig);
virtual Track *Duplicate();
virtual Track *Duplicate() const;
friend class TrackFactory;

View File

@ -145,7 +145,7 @@ class AUDACITY_DLL_API Track: public XMLTagHandler
virtual ~ Track();
void Init(const Track &orig);
virtual Track *Duplicate() = 0;
virtual Track *Duplicate() const = 0;
// Called when this track is merged to stereo with another, and should
// take on some paramaters of its partner.
@ -239,6 +239,30 @@ class AUDACITY_DLL_API TrackListIterator
TrackListNode *cur;
};
class AUDACITY_DLL_API TrackListConstIterator
{
public:
TrackListConstIterator(const TrackList * val = NULL)
: mIter(const_cast<TrackList*>(val))
{}
~TrackListConstIterator() {}
// Iterate functions
const Track *First(const TrackList * val = NULL)
{ return mIter.First(const_cast<TrackList*>(val)); }
const Track *StartWith(const Track * val)
{ return mIter.StartWith(const_cast<Track*>(val)); }
const Track *Next(bool skiplinked = false)
{ return mIter.Next(skiplinked); }
const Track *Prev(bool skiplinked = false)
{ return mIter.Prev(skiplinked); }
const Track *Last(bool skiplinked = false)
{ return mIter.Last(skiplinked); }
private:
TrackListIterator mIter;
};
// TrackListCondIterator (base class for iterators that iterate over all tracks)
// that meet a condition)
class AUDACITY_DLL_API TrackListCondIterator: public TrackListIterator

View File

@ -182,7 +182,7 @@ bool UndoManager::RedoAvailable()
return (current < (int)stack.size() - 1);
}
void UndoManager::ModifyState(TrackList * l,
void UndoManager::ModifyState(const TrackList * l,
const SelectedRegion &selectedRegion)
{
if (current == wxNOT_FOUND) {
@ -195,8 +195,8 @@ void UndoManager::ModifyState(TrackList * l,
// Duplicate
auto tracksCopy = std::make_unique<TrackList>(true);
TrackListIterator iter(l);
Track *t = iter.First();
TrackListConstIterator iter(l);
const Track *t = iter.First();
while (t) {
tracksCopy->Add(t->Duplicate());
t = iter.Next();
@ -208,7 +208,7 @@ void UndoManager::ModifyState(TrackList * l,
SonifyEndModifyState();
}
void UndoManager::PushState(TrackList * l,
void UndoManager::PushState(const TrackList * l,
const SelectedRegion &selectedRegion,
const wxString &longDescription,
const wxString &shortDescription,
@ -237,8 +237,8 @@ void UndoManager::PushState(TrackList * l,
}
auto tracksCopy = std::make_unique<TrackList>(true);
TrackListIterator iter(l);
Track *t = iter.First();
TrackListConstIterator iter(l);
const Track *t = iter.First();
while (t) {
tracksCopy->Add(t->Duplicate());
t = iter.Next();

View File

@ -99,11 +99,11 @@ class AUDACITY_DLL_API UndoManager {
UndoManager();
~UndoManager();
void PushState(TrackList * l,
void PushState(const TrackList * l,
const SelectedRegion &selectedRegion,
const wxString &longDescription, const wxString &shortDescription,
UndoPush flags = UndoPush::AUTOSAVE);
void ModifyState(TrackList * l,
void ModifyState(const TrackList * l,
const SelectedRegion &selectedRegion);
void ClearStates();
void RemoveStates(int num); // removes the 'num' oldest states

View File

@ -116,7 +116,7 @@ WaveTrack::WaveTrack(DirManager *projDirManager, sampleFormat format, double rat
mAutoSaveIdent = 0;
}
WaveTrack::WaveTrack(WaveTrack &orig):
WaveTrack::WaveTrack(const WaveTrack &orig):
Track(orig)
, mpSpectrumSettings(orig.mpSpectrumSettings
? new SpectrogramSettings(*orig.mpSpectrumSettings) : 0
@ -362,7 +362,7 @@ void WaveTrack::SetSpectrumBounds(float min, float max)
mSpectrumMax = max;
}
Track *WaveTrack::Duplicate()
Track *WaveTrack::Duplicate() const
{
return new WaveTrack(*this);
}

View File

@ -72,10 +72,10 @@ class AUDACITY_DLL_API WaveTrack : public Track {
WaveTrack(DirManager * projDirManager,
sampleFormat format = (sampleFormat)0,
double rate = 0);
WaveTrack(WaveTrack &orig);
WaveTrack(const WaveTrack &orig);
void Init(const WaveTrack &orig);
virtual Track *Duplicate();
virtual Track *Duplicate() const;
#ifdef EXPERIMENTAL_OUTPUT_DISPLAY
void VirtualStereoInit();
#endif

View File

@ -110,7 +110,7 @@ public:
double t0,
double t1,
MixerSpec *mixerSpec = NULL,
Tags *metadata = NULL,
const Tags *metadata = NULL,
int subformat = 0) = 0;
protected:

View File

@ -291,7 +291,7 @@ public:
double t0,
double t1,
MixerSpec *mixerSpec = NULL,
Tags *metadata = NULL,
const Tags *metadata = NULL,
int subformat = 0) override;
};
@ -318,7 +318,7 @@ int ExportCL::Export(AudacityProject *project,
double t0,
double t1,
MixerSpec *mixerSpec,
Tags *WXUNUSED(metadata),
const Tags *WXUNUSED(metadata),
int WXUNUSED(subformat))
{
wxString output;

View File

@ -101,16 +101,16 @@ public:
bool CheckFileName(wxFileName &filename, int format = 0);
/// Format intialization
bool Init(const char *shortname, AudacityProject *project, Tags *metadata, int subformat);
bool Init(const char *shortname, AudacityProject *project, const Tags *metadata, int subformat);
/// Codec intialization
bool InitCodecs(AudacityProject *project);
/// Writes metadata
bool AddTags(Tags *metadata);
bool AddTags(const Tags *metadata);
/// Sets individual metadata values
void SetMetadata(Tags *tags, const char *name, const wxChar *tag);
void SetMetadata(const Tags *tags, const char *name, const wxChar *tag);
/// Encodes audio
bool EncodeAudioFrame(int16_t *pFrame, int frameSize);
@ -145,7 +145,7 @@ public:
double t0,
double t1,
MixerSpec *mixerSpec = NULL,
Tags *metadata = NULL,
const Tags *metadata = NULL,
int subformat = 0) override;
private:
@ -256,7 +256,7 @@ bool ExportFFmpeg::CheckFileName(wxFileName & WXUNUSED(filename), int WXUNUSED(f
return result;
}
bool ExportFFmpeg::Init(const char *shortname, AudacityProject *project, Tags *metadata, int subformat)
bool ExportFFmpeg::Init(const char *shortname, AudacityProject *project, const Tags *metadata, int subformat)
{
int err;
//FFmpegLibsInst->LoadLibs(NULL,true); //Loaded at startup or from Prefs now
@ -792,7 +792,7 @@ bool ExportFFmpeg::EncodeAudioFrame(int16_t *pFrame, int frameSize)
int ExportFFmpeg::Export(AudacityProject *project,
int channels, const wxString &fName,
bool selectionOnly, double t0, double t1, MixerSpec *mixerSpec, Tags *metadata, int subformat)
bool selectionOnly, double t0, double t1, MixerSpec *mixerSpec, const Tags *metadata, int subformat)
{
if (!CheckFFmpegPresence())
return false;
@ -873,7 +873,7 @@ void AddStringTagANSI(char field[], int size, wxString value)
memcpy(field,value.mb_str(),(int)strlen(value.mb_str()) > size -1 ? size -1 : strlen(value.mb_str()));
}
bool ExportFFmpeg::AddTags(Tags *tags)
bool ExportFFmpeg::AddTags(const Tags *tags)
{
if (tags == NULL)
{
@ -891,7 +891,7 @@ bool ExportFFmpeg::AddTags(Tags *tags)
return true;
}
void ExportFFmpeg::SetMetadata(Tags *tags, const char *name, const wxChar *tag)
void ExportFFmpeg::SetMetadata(const Tags *tags, const char *name, const wxChar *tag)
{
if (tags->HasTag(tag))
{

View File

@ -190,12 +190,12 @@ public:
double t0,
double t1,
MixerSpec *mixerSpec = NULL,
Tags *metadata = NULL,
const Tags *metadata = NULL,
int subformat = 0) override;
private:
bool GetMetadata(AudacityProject *project, Tags *tags);
bool GetMetadata(AudacityProject *project, const Tags *tags);
FLAC__StreamMetadata *mMetadata;
};
@ -225,7 +225,7 @@ int ExportFLAC::Export(AudacityProject *project,
double t0,
double t1,
MixerSpec *mixerSpec,
Tags *metadata,
const Tags *metadata,
int WXUNUSED(subformat))
{
double rate = project->GetRate();
@ -380,7 +380,7 @@ wxWindow *ExportFLAC::OptionsCreate(wxWindow *parent, int format)
// expects that array to be valid until the stream is initialized.
//
// This has been fixed in 1.1.4.
bool ExportFLAC::GetMetadata(AudacityProject *project, Tags *tags)
bool ExportFLAC::GetMetadata(AudacityProject *project, const Tags *tags)
{
// Retrieve tags if needed
if (tags == NULL)

View File

@ -181,12 +181,12 @@ public:
double t0,
double t1,
MixerSpec *mixerSpec = NULL,
Tags *metadata = NULL,
const Tags *metadata = NULL,
int subformat = 0) override;
private:
int AddTags(AudacityProject *project, char **buffer, bool *endOfFile, Tags *tags);
int AddTags(AudacityProject *project, char **buffer, bool *endOfFile, const Tags *tags);
#ifdef USE_LIBID3TAG
void AddFrame(struct id3_tag *tp, const wxString & n, const wxString & v, const char *name);
#endif
@ -211,7 +211,7 @@ void ExportMP2::Destroy()
int ExportMP2::Export(AudacityProject *project,
int channels, const wxString &fName,
bool selectionOnly, double t0, double t1, MixerSpec *mixerSpec, Tags *metadata,
bool selectionOnly, double t0, double t1, MixerSpec *mixerSpec, const Tags *metadata,
int WXUNUSED(subformat))
{
bool stereo = (channels == 2);
@ -339,7 +339,7 @@ wxWindow *ExportMP2::OptionsCreate(wxWindow *parent, int format)
}
// returns buffer len; caller frees
int ExportMP2::AddTags(AudacityProject * WXUNUSED(project), char **buffer, bool *endOfFile, Tags *tags)
int ExportMP2::AddTags(AudacityProject * WXUNUSED(project), char **buffer, bool *endOfFile, const Tags *tags)
{
#ifdef USE_LIBID3TAG
struct id3_tag *tp = id3_tag_new();

View File

@ -1569,7 +1569,7 @@ public:
double t0,
double t1,
MixerSpec *mixerSpec = NULL,
Tags *metadata = NULL,
const Tags *metadata = NULL,
int subformat = 0) override;
private:
@ -1577,7 +1577,7 @@ private:
int FindValue(CHOICES *choices, int cnt, int needle, int def);
wxString FindName(CHOICES *choices, int cnt, int needle);
int AskResample(int bitrate, int rate, int lowrate, int highrate);
int AddTags(AudacityProject *project, char **buffer, bool *endOfFile, Tags *tags);
int AddTags(AudacityProject *project, char **buffer, bool *endOfFile, const Tags *tags);
#ifdef USE_LIBID3TAG
void AddFrame(struct id3_tag *tp, const wxString & n, const wxString & v, const char *name);
#endif
@ -1624,7 +1624,7 @@ int ExportMP3::Export(AudacityProject *project,
double t0,
double t1,
MixerSpec *mixerSpec,
Tags *metadata,
const Tags *metadata,
int WXUNUSED(subformat))
{
int rate = lrint(project->GetRate());
@ -1965,7 +1965,7 @@ int ExportMP3::AskResample(int bitrate, int rate, int lowrate, int highrate)
}
// returns buffer len; caller frees
int ExportMP3::AddTags(AudacityProject *WXUNUSED(project), char **buffer, bool *endOfFile, Tags *tags)
int ExportMP3::AddTags(AudacityProject *WXUNUSED(project), char **buffer, bool *endOfFile, const Tags *tags)
{
#ifdef USE_LIBID3TAG
struct id3_tag *tp = id3_tag_new();

View File

@ -911,7 +911,7 @@ int ExportMultiple::DoExport(int channels,
bool selectedOnly,
double t0,
double t1,
Tags tags)
const Tags &tags)
{
wxLogDebug(wxT("Doing multiple Export: File name \"%s\""), (name.GetFullName()).c_str());
wxLogDebug(wxT("Channels: %i, Start: %lf, End: %lf "), channels, t0, t1);

View File

@ -79,7 +79,7 @@ private:
bool selectedOnly,
double t0,
double t1,
Tags tags);
const Tags &tags);
/** \brief Takes an arbitrary text string and converts it to a form that can
* be used as a file name, if necessary prompting the user to edit the file
* name produced */

View File

@ -140,12 +140,12 @@ public:
double t0,
double t1,
MixerSpec *mixerSpec = NULL,
Tags *metadata = NULL,
const Tags *metadata = NULL,
int subformat = 0) override;
private:
bool FillComment(AudacityProject *project, vorbis_comment *comment, Tags *metadata);
bool FillComment(AudacityProject *project, vorbis_comment *comment, const Tags *metadata);
};
ExportOGG::ExportOGG()
@ -171,7 +171,7 @@ int ExportOGG::Export(AudacityProject *project,
double t0,
double t1,
MixerSpec *mixerSpec,
Tags *metadata,
const Tags *metadata,
int WXUNUSED(subformat))
{
double rate = project->GetRate();
@ -341,7 +341,7 @@ wxWindow *ExportOGG::OptionsCreate(wxWindow *parent, int format)
return safenew ExportOGGOptions(parent, format);
}
bool ExportOGG::FillComment(AudacityProject *project, vorbis_comment *comment, Tags *metadata)
bool ExportOGG::FillComment(AudacityProject *project, vorbis_comment *comment, const Tags *metadata)
{
// Retrieve tags from project if not over-ridden
if (metadata == NULL)

View File

@ -320,7 +320,7 @@ public:
double t0,
double t1,
MixerSpec *mixerSpec = NULL,
Tags *metadata = NULL,
const Tags *metadata = NULL,
int subformat = 0) override;
// optional
wxString GetExtension(int index);
@ -329,8 +329,8 @@ public:
private:
char *AdjustString(const wxString & wxStr, int sf_format);
bool AddStrings(AudacityProject *project, SNDFILE *sf, Tags *tags, int sf_format);
void AddID3Chunk(wxString fName, Tags *tags, int sf_format);
bool AddStrings(AudacityProject *project, SNDFILE *sf, const Tags *tags, int sf_format);
void AddID3Chunk(wxString fName, const Tags *tags, int sf_format);
};
@ -395,7 +395,7 @@ int ExportPCM::Export(AudacityProject *project,
double t0,
double t1,
MixerSpec *mixerSpec,
Tags *metadata,
const Tags *metadata,
int subformat)
{
double rate = project->GetRate();
@ -664,7 +664,7 @@ char *ExportPCM::AdjustString(const wxString & wxStr, int sf_format)
return pDest;
}
bool ExportPCM::AddStrings(AudacityProject * WXUNUSED(project), SNDFILE *sf, Tags *tags, int sf_format)
bool ExportPCM::AddStrings(AudacityProject * WXUNUSED(project), SNDFILE *sf, const Tags *tags, int sf_format)
{
if (tags->HasTag(TAG_TITLE)) {
char * ascii7Str = AdjustString(tags->GetTag(TAG_TITLE), sf_format);
@ -741,7 +741,7 @@ bool ExportPCM::AddStrings(AudacityProject * WXUNUSED(project), SNDFILE *sf, Tag
return true;
}
void ExportPCM::AddID3Chunk(wxString fName, Tags *tags, int sf_format)
void ExportPCM::AddID3Chunk(wxString fName, const Tags *tags, int sf_format)
{
#ifdef USE_LIBID3TAG
struct id3_tag *tp = id3_tag_new();