Utilized more C++11 constructs. Also attempted to fix issue with the Info Box not wanting to come up anymore if the file doesn't exist.
--- a/src/in_2sf/XSFPlayer_2SF.cpp
+++ b/src/in_2sf/XSFPlayer_2SF.cpp
@@ -488,9 +488,9 @@
if (level <= 10 && xSF->GetTagExists("_lib"))
{
#ifdef _WIN32
- auto libxSF = std::auto_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSF->GetFilename().GetWStr()) + xSF->GetTagValue("_lib").GetWStr(), 4, 8));
+ auto libxSF = std::unique_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSF->GetFilename().GetWStr()) + xSF->GetTagValue("_lib").GetWStr(), 4, 8));
#else
- auto libxSF = std::auto_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSF->GetFilename().GetAnsi()) + xSF->GetTagValue("_lib").GetAnsi(), 4, 8));
+ auto libxSF = std::unique_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSF->GetFilename().GetAnsi()) + xSF->GetTagValue("_lib").GetAnsi(), 4, 8));
#endif
if (!RecursiveLoad2SF(libxSF.get(), level + 1))
return false;
@@ -509,9 +509,9 @@
{
found = true;
#ifdef _WIN32
- auto libxSF = std::auto_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSF->GetFilename().GetWStr()) + xSF->GetTagValue(libTag).GetWStr(), 4, 8));
+ auto libxSF = std::unique_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSF->GetFilename().GetWStr()) + xSF->GetTagValue(libTag).GetWStr(), 4, 8));
#else
- auto libxSF = std::auto_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSF->GetFilename().GetAnsi()) + xSF->GetTagValue(libTag).GetAnsi(), 4, 8));
+ auto libxSF = std::unique_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSF->GetFilename().GetAnsi()) + xSF->GetTagValue(libTag).GetAnsi(), 4, 8));
#endif
if (!RecursiveLoad2SF(libxSF.get(), level + 1))
return false;
--- a/src/in_gsf/XSFPlayer_GSF.cpp
+++ b/src/in_gsf/XSFPlayer_GSF.cpp
@@ -149,9 +149,9 @@
if (level <= 10 && xSF->GetTagExists("_lib"))
{
#ifdef _WIN32
- auto libxSF = std::auto_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSF->GetFilename().GetWStr()) + xSF->GetTagValue("_lib").GetWStr(), 8, 12));
+ auto libxSF = std::unique_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSF->GetFilename().GetWStr()) + xSF->GetTagValue("_lib").GetWStr(), 8, 12));
#else
- auto libxSF = std::auto_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSF->GetFilename().GetAnsi()) + xSF->GetTagValue("_lib").GetAnsi(), 8, 12));
+ auto libxSF = std::unique_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSF->GetFilename().GetAnsi()) + xSF->GetTagValue("_lib").GetAnsi(), 8, 12));
#endif
if (!RecursiveLoad2SF(libxSF.get(), level + 1))
return false;
@@ -170,9 +170,9 @@
{
found = true;
#ifdef _WIN32
- auto libxSF = std::auto_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSF->GetFilename().GetWStr()) + xSF->GetTagValue(libTag).GetWStr(), 8, 12));
+ auto libxSF = std::unique_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSF->GetFilename().GetWStr()) + xSF->GetTagValue(libTag).GetWStr(), 8, 12));
#else
- auto libxSF = std::auto_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSF->GetFilename().GetAnsi()) + xSF->GetTagValue(libTag).GetAnsi(), 8, 12));
+ auto libxSF = std::unique_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSF->GetFilename().GetAnsi()) + xSF->GetTagValue(libTag).GetAnsi(), 8, 12));
#endif
if (!RecursiveLoad2SF(libxSF.get(), level + 1))
return false;
--- a/src/in_ncsf/SSEQPlayer/SDAT.h
+++ b/src/in_ncsf/SSEQPlayer/SDAT.h
@@ -18,9 +18,9 @@
struct SDAT
{
- std::auto_ptr<SSEQ> sseq;
- std::auto_ptr<SBNK> sbnk;
- std::auto_ptr<SWAR> swar[4];
+ std::unique_ptr<SSEQ> sseq;
+ std::unique_ptr<SBNK> sbnk;
+ std::unique_ptr<SWAR> swar[4];
SDAT(PseudoFile &file, uint32_t sseqToLoad);
private:
--- a/src/in_ncsf/XSFPlayer_NCSF.cpp
+++ b/src/in_ncsf/XSFPlayer_NCSF.cpp
@@ -61,9 +61,9 @@
if (level <= 10 && xSFToLoad->GetTagExists("_lib"))
{
#ifdef _WIN32
- auto libxSF = std::auto_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSFToLoad->GetFilename().GetWStr()) + xSFToLoad->GetTagValue("_lib").GetWStr(), 8, 12));
+ auto libxSF = std::unique_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSFToLoad->GetFilename().GetWStr()) + xSFToLoad->GetTagValue("_lib").GetWStr(), 8, 12));
#else
- auto libxSF = std::auto_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSFToLoad->GetFilename().GetAnsi()) + xSFToLoad->GetTagValue("_lib").GetAnsi(), 8, 12));
+ auto libxSF = std::unique_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSFToLoad->GetFilename().GetAnsi()) + xSFToLoad->GetTagValue("_lib").GetAnsi(), 8, 12));
#endif
if (!this->RecursiveLoadNCSF(libxSF.get(), level + 1))
return false;
@@ -82,9 +82,9 @@
{
found = true;
#ifdef _WIN32
- auto libxSF = std::auto_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSFToLoad->GetFilename().GetWStr()) + xSFToLoad->GetTagValue(libTag).GetWStr(), 8, 12));
+ auto libxSF = std::unique_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSFToLoad->GetFilename().GetWStr()) + xSFToLoad->GetTagValue(libTag).GetWStr(), 8, 12));
#else
- auto libxSF = std::auto_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSFToLoad->GetFilename().GetAnsi()) + xSFToLoad->GetTagValue(libTag).GetAnsi(), 8, 12));
+ auto libxSF = std::unique_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSFToLoad->GetFilename().GetAnsi()) + xSFToLoad->GetTagValue(libTag).GetAnsi(), 8, 12));
#endif
if (!this->RecursiveLoadNCSF(libxSF.get(), level + 1))
return false;
--- a/src/in_ncsf/XSFPlayer_NCSF.h
+++ b/src/in_ncsf/XSFPlayer_NCSF.h
@@ -22,7 +22,7 @@
{
uint32_t sseq;
std::vector<uint8_t> sdatData;
- std::auto_ptr<SDAT> sdat;
+ std::unique_ptr<SDAT> sdat;
Player player;
double secondsPerSample, secondsIntoPlayback, secondsUntilNextClock;
std::bitset<16> mutes;
--- a/src/in_snsf/XSFPlayer_SNSF.cpp
+++ b/src/in_snsf/XSFPlayer_SNSF.cpp
@@ -160,9 +160,9 @@
if (level <= 10 && xSF->GetTagExists("_lib"))
{
#ifdef _WIN32
- auto libxSF = std::auto_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSF->GetFilename().GetWStr()) + xSF->GetTagValue("_lib").GetWStr(), 4, 8));
+ auto libxSF = std::unique_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSF->GetFilename().GetWStr()) + xSF->GetTagValue("_lib").GetWStr(), 4, 8));
#else
- auto libxSF = std::auto_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSF->GetFilename().GetAnsi()) + xSF->GetTagValue("_lib").GetAnsi(), 4, 8));
+ auto libxSF = std::unique_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSF->GetFilename().GetAnsi()) + xSF->GetTagValue("_lib").GetAnsi(), 4, 8));
#endif
if (!RecursiveLoad2SF(libxSF.get(), level + 1))
return false;
@@ -181,9 +181,9 @@
{
found = true;
#ifdef _WIN32
- auto libxSF = std::auto_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSF->GetFilename().GetWStr()) + xSF->GetTagValue(libTag).GetWStr(), 4, 8));
+ auto libxSF = std::unique_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSF->GetFilename().GetWStr()) + xSF->GetTagValue(libTag).GetWStr(), 4, 8));
#else
- auto libxSF = std::auto_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSF->GetFilename().GetAnsi()) + xSF->GetTagValue(libTag).GetAnsi(), 4, 8));
+ auto libxSF = std::unique_ptr<XSFFile>(new XSFFile(ExtractDirectoryFromPath(xSF->GetFilename().GetAnsi()) + xSF->GetTagValue(libTag).GetAnsi(), 4, 8));
#endif
if (!RecursiveLoad2SF(libxSF.get(), level + 1))
return false;
--- a/src/in_xsf_framework/DialogBuilder.cpp
+++ b/src/in_xsf_framework/DialogBuilder.cpp
@@ -21,7 +21,7 @@
short x = 0, num = this->controls.empty() ? 0 : this->controls.size();
for (; x < num; ++x)
{
- DialogControl *control = this->controls[x];
+ auto &control = this->controls[x];
if (control->relativePosition.get())
{
bool valid = true;
@@ -58,10 +58,8 @@
void DialogTemplate::DialogGroup::CalculateSize()
{
short maxX = 0, maxY = 0, maxOtherWidth = 0, maxOtherHeight = 0;
- for (DialogTemplate::Controls::const_iterator curr = this->controls.begin(), end = this->controls.end(); curr != end; ++curr)
- {
- DialogControl *control = *curr;
-
+ std::for_each(this->controls.begin(), this->controls.end(), [&](const std::unique_ptr<DialogControl> &control)
+ {
bool usePosition = true;
if (control->relativePosition.get())
{
@@ -92,7 +90,7 @@
if (control->rect.position.y + control->GetControlHeight() > maxY)
maxY = control->rect.position.y + control->GetControlHeight();
}
- }
+ });
this->rect.size.width = (maxX - this->rect.position.x) + maxOtherWidth + 4;
this->rect.size.height = (maxY - this->rect.position.y) + maxOtherHeight + 7;
}
@@ -100,8 +98,7 @@
uint16_t DialogTemplate::DialogGroup::GetControlCount() const
{
uint16_t count = 1;
- for (auto curr = this->controls.begin(), end = this->controls.end(); curr != end; ++curr)
- count += (*curr)->GetControlCount();
+ std::for_each(this->controls.begin(), this->controls.end(), [&](const std::unique_ptr<DialogControl> &control) { count += control->GetControlCount(); });
return count;
}
@@ -120,11 +117,11 @@
*reinterpret_cast<uint16_t *>(&data[20]) = 0x0080;
memcpy(reinterpret_cast<wchar_t *>(&data[22]), this->groupName.c_str(), this->groupName.length() * sizeof(wchar_t));
- for (auto curr = this->controls.begin(), end = this->controls.end(); curr != end; ++curr)
- {
- auto controlData = (*curr)->GenerateControlTemplate();
+ std::for_each(this->controls.begin(), this->controls.end(), [&](const std::unique_ptr<DialogControl> &control)
+ {
+ auto controlData = control->GenerateControlTemplate();
data.insert(data.end(), controlData.begin(), controlData.end());
- }
+ });
return data;
}
@@ -165,53 +162,52 @@
uint16_t DialogTemplate::GetTotalControlCount() const
{
uint16_t count = 0;
- for (auto curr = this->controls.begin(), end = this->controls.end(); curr != end; ++curr)
- count += (*curr)->GetControlCount();
+ std::for_each(this->controls.begin(), this->controls.end(), [&](const std::unique_ptr<DialogControl> &control) { count += control->GetControlCount(); });
return count;
}
void DialogTemplate::AddGroupControl(const DialogControlBuilder<DialogGroupBuilder> &builder)
{
- DialogGroup *newGroup = DialogGroup::CreateControl(builder);
+ std::unique_ptr<DialogControl> newGroup = DialogGroup::CreateControl(builder);
if (builder.index == -1)
- this->controls.push_back(newGroup);
+ this->controls.push_back(std::move(newGroup));
else
- this->controls.insert(this->controls.begin() + builder.index, newGroup);
+ this->controls.insert(this->controls.begin() + builder.index, std::move(newGroup));
}
void DialogTemplate::AddEditBoxControl(const DialogControlBuilder<DialogEditBoxBuilder> &builder)
{
- this->AddControlToGroup(DialogEditBox::CreateControl(builder), builder);
+ this->AddControlToGroup(std::move(DialogEditBox::CreateControl(builder)), builder);
}
void DialogTemplate::AddLabelControl(const DialogControlBuilder<DialogLabelBuilder> &builder)
{
- this->AddControlToGroup(DialogLabel::CreateControl(builder), builder);
+ this->AddControlToGroup(std::move(DialogLabel::CreateControl(builder)), builder);
}
void DialogTemplate::AddCheckBoxControl(const DialogControlBuilder<DialogCheckBoxBuilder> &builder)
{
- this->AddControlToGroup(DialogButton::CreateControl(builder), builder);
+ this->AddControlToGroup(std::move(DialogButton::CreateControl(builder)), builder);
}
void DialogTemplate::AddButtonControl(const DialogControlBuilder<DialogButtonBuilder> &builder)
{
- this->AddControlToGroup(DialogButton::CreateControl(builder), builder);
+ this->AddControlToGroup(std::move(DialogButton::CreateControl(builder)), builder);
}
void DialogTemplate::AddListBoxControl(const DialogControlBuilder<DialogListBoxBuilder> &builder)
{
- this->AddControlToGroup(DialogListBox::CreateControl(builder), builder);
+ this->AddControlToGroup(std::move(DialogListBox::CreateControl(builder)), builder);
}
void DialogTemplate::AddComboBoxControl(const DialogControlBuilder<DialogComboBoxBuilder> &builder)
{
- this->AddControlToGroup(DialogComboBox::CreateControl(builder), builder);
+ this->AddControlToGroup(std::move(DialogComboBox::CreateControl(builder)), builder);
}
bool DialogTemplate::CalculateControlPosition(short index, bool doRightAndBottom)
{
- DialogControl *control = this->controls[index];
+ auto &control = this->controls[index];
bool valid = true;
if (control->relativePosition.get())
{
@@ -248,10 +244,8 @@
void DialogTemplate::CalculateSize()
{
short maxX = 0, maxY = 0, maxOtherWidth = 0, maxOtherHeight = 0;
- for (auto curr = this->controls.begin(), end = this->controls.end(); curr != end; ++curr)
- {
- DialogControl *control = *curr;
-
+ std::for_each(this->controls.begin(), this->controls.end(), [&](const std::unique_ptr<DialogControl> &control)
+ {
bool usePosition = true;
if (control->relativePosition.get())
{
@@ -282,7 +276,7 @@
if (control->rect.position.y + control->GetControlHeight() > maxY)
maxY = control->rect.position.y + control->GetControlHeight();
}
- }
+ });
this->size.width = maxX + maxOtherWidth + 7;
this->size.height = maxY + maxOtherHeight + 7;
}
@@ -293,13 +287,13 @@
short x = 0, num = this->controls.empty() ? 0 : this->controls.size(), maxGroupWidth = 0;
for (; x < num; ++x)
{
- DialogControl *control = this->controls[x];
+ auto &control = this->controls[x];
bool valid = this->CalculateControlPosition(x, false);
if (valid && control->controlType == GROUP_CONTROL)
{
- dynamic_cast<DialogGroup *>(control)->CalculatePositions(false);
+ dynamic_cast<DialogGroup *>(control.get())->CalculatePositions(false);
// Techically step 2, but calculate the size of the group
- dynamic_cast<DialogGroup *>(control)->CalculateSize();
+ dynamic_cast<DialogGroup *>(control.get())->CalculateSize();
if (control->rect.size.width > maxGroupWidth)
maxGroupWidth = control->rect.size.width;
}
@@ -307,11 +301,11 @@
// Step 2: Resize all group controls to be the same width, and then within the group, recalculate positions for all controls
for (x = 0; x < num; ++x)
{
- DialogControl *control = this->controls[x];
+ auto &control = this->controls[x];
if (control->controlType != GROUP_CONTROL)
continue;
control->rect.size.width = maxGroupWidth;
- dynamic_cast<DialogGroup *>(control)->CalculatePositions(true);
+ dynamic_cast<DialogGroup *>(control.get())->CalculatePositions(true);
}
// Step 3: Resize the dialog box itself
this->CalculateSize();
@@ -337,11 +331,11 @@
memcpy(reinterpret_cast<wchar_t *>(&this->templateData[24 + sizeof(wchar_t) * (this->title.length() + 1)]), this->fontName.c_str(), this->fontName.length() * sizeof(wchar_t));
}
- for (auto curr = this->controls.begin(), end = this->controls.end(); curr != end; ++curr)
- {
- auto controlData = (*curr)->GenerateControlTemplate();
+ std::for_each(this->controls.begin(), this->controls.end(), [&](const std::unique_ptr<DialogControl> &control)
+ {
+ auto controlData = control->GenerateControlTemplate();
this->templateData.insert(this->templateData.end(), controlData.begin(), controlData.end());
- }
+ });
return reinterpret_cast<const DLGTEMPLATE *>(&this->templateData[0]);
}
--- a/src/in_xsf_framework/DialogBuilder.h
+++ b/src/in_xsf_framework/DialogBuilder.h
@@ -10,6 +10,7 @@
#include <string>
#include <memory>
#include <vector>
+#include <algorithm>
#include <stdexcept>
#include "pstdint.h"
#include "windowsh_wrapper.h"
@@ -162,7 +163,7 @@
Rect<short> rect;
short id;
int index;
- std::auto_ptr<RelativePosition> relativePosition;
+ std::unique_ptr<RelativePosition> relativePosition;
T &me() { return dynamic_cast<T &>(*this); }
public:
@@ -385,7 +386,7 @@
{
class DialogControl;
- typedef std::vector<DialogControl *> Controls;
+ typedef std::vector<std::unique_ptr<DialogControl>> Controls;
class DialogControl
{
@@ -394,7 +395,7 @@
uint32_t style, exstyle;
Rect<short> rect;
short id;
- std::auto_ptr<RelativePosition> relativePosition;
+ std::unique_ptr<RelativePosition> relativePosition;
friend class DialogTemplate;
DialogControl() : controlType(NO_CONTROL), style(0), exstyle(0), rect(), id(-1), relativePosition() { }
@@ -416,9 +417,9 @@
}
public:
virtual ~DialogControl() { }
- template<typename Control, typename Builder> static Control *CreateControl(const DialogControlBuilder<Builder> &builder)
- {
- Control *control = new Control();
+ template<typename Control, typename Builder> static std::unique_ptr<Control> CreateControl(const DialogControlBuilder<Builder> &builder)
+ {
+ auto control = std::unique_ptr<Control>(new Control());
control->controlType = builder.controlType;
control->style = builder.style;
@@ -447,30 +448,23 @@
DialogGroup() : DialogControl(), controls(), groupName(L"") { }
DialogGroup(const DialogGroup &control) : DialogControl(control), controls(), groupName(control.groupName)
{
- for (auto curr = control.controls.begin(), end = control.controls.end(); curr != end; ++curr)
- this->controls.push_back((*curr)->Clone());
+ std::for_each(control.controls.begin(), control.controls.end(), [&](const std::unique_ptr<DialogControl> &control) { this->controls.push_back(std::unique_ptr<DialogControl>(control->Clone())); });
}
DialogGroup &operator=(const DialogGroup &control)
{
DialogControl::operator=(control);
- if (!this->controls.empty())
- this->ClearControls();
- for (auto curr = control.controls.begin(), end = control.controls.end(); curr != end; ++curr)
- this->controls.push_back((*curr)->Clone());
+ this->controls.clear();
+ std::for_each(control.controls.begin(), control.controls.end(), [&](const std::unique_ptr<DialogControl> &control) { this->controls.push_back(std::unique_ptr<DialogControl>(control->Clone())); });
+
+ this->groupName = control.groupName;
return *this;
}
- void ClearControls()
- {
- for (auto curr = this->controls.begin(), end = this->controls.end(); curr != end; ++curr)
- delete *curr;
- }
- public:
- ~DialogGroup() { this->ClearControls(); }
- static DialogGroup *CreateControl(const DialogControlBuilder<DialogGroupBuilder> &builder)
- {
- DialogGroup *control = DialogControl::CreateControl<DialogGroup>(builder);
+ public:
+ static std::unique_ptr<DialogGroup> CreateControl(const DialogControlBuilder<DialogGroupBuilder> &builder)
+ {
+ auto control = DialogControl::CreateControl<DialogGroup>(builder);
control->groupName = dynamic_cast<const DialogGroupBuilder &>(builder).groupName;
@@ -501,9 +495,9 @@
return *this;
}
public:
- template<typename Control, typename Builder> static Control *CreateControl(const DialogControlBuilder<Builder> &builder, uint16_t Type)
- {
- Control *control = DialogControl::CreateControl<Control>(builder);
+ template<typename Control, typename Builder> static std::unique_ptr<Control> CreateControl(const DialogControlBuilder<Builder> &builder, uint16_t Type)
+ {
+ auto control = DialogControl::CreateControl<Control>(builder);
control->type = Type;
@@ -533,9 +527,9 @@
return *this;
}
public:
- template<typename Control, typename Builder> static Control *CreateControl(const DialogControlBuilder<Builder> &builder, uint16_t Type)
- {
- Control *control = DialogControl::CreateControl<Control>(builder);
+ template<typename Control, typename Builder> static std::unique_ptr<Control> CreateControl(const DialogControlBuilder<Builder> &builder, uint16_t Type)
+ {
+ auto control = DialogControl::CreateControl<Control>(builder);
control->type = Type;
control->label = dynamic_cast<const DialogControlWithLabelBuilder<Builder> &>(builder).label;
@@ -553,7 +547,7 @@
friend class DialogControl;
DialogEditBox() : DialogControlWithoutLabel() { }
public:
- static DialogEditBox *CreateControl(const DialogControlBuilder<DialogEditBoxBuilder> &builder)
+ static std::unique_ptr<DialogEditBox> CreateControl(const DialogControlBuilder<DialogEditBoxBuilder> &builder)
{
return DialogControlWithoutLabel::CreateControl<DialogEditBox>(builder, 0x0081);
}
@@ -566,7 +560,7 @@
friend class DialogControl;
DialogLabel() : DialogControlWithLabel() { }
public:
- static DialogLabel *CreateControl(const DialogControlBuilder<DialogLabelBuilder> &builder)
+ static std::unique_ptr<DialogLabel> CreateControl(const DialogControlBuilder<DialogLabelBuilder> &builder)
{
return DialogControlWithLabel::CreateControl<DialogLabel>(builder, 0x0082);
}
@@ -579,7 +573,7 @@
friend class DialogControl;
DialogButton() : DialogControlWithLabel() { }
public:
- template<typename Builder> static DialogButton *CreateControl(const DialogControlBuilder<Builder> &builder)
+ template<typename Builder> static std::unique_ptr<DialogButton> CreateControl(const DialogControlBuilder<Builder> &builder)
{
return DialogControlWithLabel::CreateControl<DialogButton>(builder, 0x0080);
}
@@ -592,7 +586,7 @@
friend class DialogControl;
DialogListBox() : DialogControlWithoutLabel() { }
public:
- static DialogListBox *CreateControl(const DialogControlBuilder<DialogListBoxBuilder> &builder)
+ static std::unique_ptr<DialogListBox> CreateControl(const DialogControlBuilder<DialogListBoxBuilder> &builder)
{
return DialogControlWithoutLabel::CreateControl<DialogListBox>(builder, 0x0083);
}
@@ -605,7 +599,7 @@
friend class DialogControl;
DialogComboBox() : DialogControlWithoutLabel() { }
public:
- static DialogComboBox *CreateControl(const DialogControlBuilder<DialogComboBoxBuilder> &builder)
+ static std::unique_ptr<DialogComboBox> CreateControl(const DialogControlBuilder<DialogComboBoxBuilder> &builder)
{
return DialogControlWithoutLabel::CreateControl<DialogComboBox>(builder, 0x0085);
}
@@ -617,32 +611,32 @@
std::wstring fontName;
uint16_t fontSizeInPts;
Size<short> size;
- Controls controls;
+ DialogTemplate::Controls controls;
std::vector<uint8_t> templateData;
- template<typename Builder> void AddControlToGroup(DialogControl *control, const DialogControlBuilder<Builder> &builder)
+ template<typename Builder> void AddControlToGroup(std::unique_ptr<DialogControl> &&control, const DialogControlBuilder<Builder> &builder)
{
const DialogInGroupBuilder<Builder> &groupBuilder = dynamic_cast<const DialogInGroupBuilder<Builder> &>(builder);
if (groupBuilder.groupName.empty())
{
if (builder.index == -1)
- this->controls.push_back(control);
+ this->controls.push_back(std::move(control));
else
- this->controls.insert(this->controls.begin() + builder.index, control);
+ this->controls.insert(this->controls.begin() + builder.index, std::move(control));
}
else
{
- for (DialogTemplate::Controls::iterator curr = this->controls.begin(), end = this->controls.end(); curr != end; ++curr)
+ for (auto curr = this->controls.begin(), end = this->controls.end(); curr != end; ++curr)
{
if ((*curr)->controlType != GROUP_CONTROL)
continue;
- DialogGroup *group = dynamic_cast<DialogGroup *>(*curr);
+ DialogGroup *group = dynamic_cast<DialogGroup *>(curr->get());
if (group->groupName == groupBuilder.groupName)
{
if (builder.index == -1)
- group->controls.push_back(control);
+ group->controls.push_back(std::move(control));
else
- group->controls.insert(group->controls.begin() + builder.index, control);
+ group->controls.insert(group->controls.begin() + builder.index, std::move(control));
return;
}
}
@@ -652,11 +646,6 @@
uint16_t GetTotalControlCount() const;
bool CalculateControlPosition(short index, bool doRightAndBottom = false);
void CalculateSize();
- void ClearControls()
- {
- for (auto curr = this->controls.begin(), end = this->controls.end(); curr != end; ++curr)
- delete *curr;
- }
public:
DialogTemplate() : title(L""), style(0), exstyle(0), fontName(L""), fontSizeInPts(0), size(), controls(), templateData() { }
DialogTemplate(const DialogBuilder &builder) : title(builder.title), style(builder.style), exstyle(builder.exstyle), fontName(builder.fontName), fontSizeInPts(builder.fontSizeInPts),
@@ -664,8 +653,7 @@
DialogTemplate(const DialogTemplate &dlg) : title(dlg.title), style(dlg.style), exstyle(dlg.style), fontName(dlg.fontName), fontSizeInPts(dlg.fontSizeInPts), size(dlg.size),
controls(), templateData()
{
- for (auto curr = dlg.controls.begin(), end = dlg.controls.end(); curr != end; ++curr)
- this->controls.push_back((*curr)->Clone());
+ std::for_each(dlg.controls.begin(), dlg.controls.end(), [&](const std::unique_ptr<DialogControl> &control) { this->controls.push_back(std::unique_ptr<DialogControl>(control->Clone())); });
}
DialogTemplate &operator=(const DialogBuilder &builder)
{
@@ -675,8 +663,8 @@
this->fontName = builder.fontName;
this->fontSizeInPts = builder.fontSizeInPts;
this->size = builder.size;
- if (builder.resetControls && !this->controls.empty())
- this->ClearControls();
+ if (builder.resetControls)
+ this->controls.clear();
return *this;
}
@@ -688,14 +676,11 @@
this->fontName = dlg.fontName;
this->fontSizeInPts = dlg.fontSizeInPts;
this->size = dlg.size;
- if (!this->controls.empty())
- this->ClearControls();
- for (auto curr = dlg.controls.begin(), end = dlg.controls.end(); curr != end; ++curr)
- this->controls.push_back((*curr)->Clone());
+ this->controls.clear();
+ std::for_each(dlg.controls.begin(), dlg.controls.end(), [&](const std::unique_ptr<DialogControl> &control) { this->controls.push_back(std::unique_ptr<DialogControl>(control->Clone())); });
return *this;
}
- ~DialogTemplate() { this->ClearControls(); }
void AddGroupControl(const DialogControlBuilder<DialogGroupBuilder> &builder);
void AddEditBoxControl(const DialogControlBuilder<DialogEditBoxBuilder> &builder);
void AddLabelControl(const DialogControlBuilder<DialogLabelBuilder> &builder);
--- a/src/in_xsf_framework/XSFConfig.h
+++ b/src/in_xsf_framework/XSFConfig.h
@@ -45,7 +45,7 @@
std::wstring titleFormat;
DialogTemplate configDialog, configDialogProperty, infoDialog;
std::vector<unsigned> supportedSampleRates;
- std::auto_ptr<XSFConfigIO> configIO;
+ std::unique_ptr<XSFConfigIO> configIO;
XSFConfig();
std::wstring GetTextFromWindow(HWND hwnd);
--- a/src/in_xsf_framework/XSFFile.cpp
+++ b/src/in_xsf_framework/XSFFile.cpp
@@ -466,11 +466,11 @@
if (!allTags.empty())
{
xSF.write("[TAG]", 5);
- for (auto curr = allTags.begin(), end = allTags.end(); curr != end; ++curr)
- {
- xSF.write(curr->c_str(), curr->length());
+ std::for_each(allTags.begin(), allTags.end(), [&](const std::string &tag)
+ {
+ xSF.write(tag.c_str(), tag.length());
xSF.write("\n", 1);
- }
- }
-}
-
+ });
+ }
+}
+
--- a/src/in_xsf_framework/convert.h
+++ b/src/in_xsf_framework/convert.h
@@ -71,7 +71,7 @@
auto inputChars = std::vector<char>(input.begin(), input.end());
size_t length = inputChars.size();
auto masks = std::vector<std::ctype<char>::mask>(length);
- std::use_facet<std::ctype<char> >(loc).is(&inputChars[0], &inputChars[length], &masks[0]);
+ std::use_facet<std::ctype<char>>(loc).is(&inputChars[0], &inputChars[length], &masks[0]);
for (size_t x = 0; x < length; ++x)
if (inputChars[x] != '.' && !(masks[x] & std::ctype<char>::digit))
return false;
--- a/src/in_xsf_framework/eqstr.h
+++ b/src/in_xsf_framework/eqstr.h
@@ -31,7 +31,7 @@
{
for (int i = CHAR_MIN; i <= CHAR_MAX; ++i)
this->tab[i - CHAR_MIN] = static_cast<char>(i);
- std::use_facet<std::ctype<char> >(L).toupper(this->tab, this->tab + (CHAR_MAX - CHAR_MIN + 1));
+ std::use_facet<std::ctype<char>>(L).toupper(this->tab, this->tab + (CHAR_MAX - CHAR_MIN + 1));
}
bool operator()(const std::string &x, const std::string &y) const
--- a/src/in_xsf_framework/in_xsf.cpp
+++ b/src/in_xsf_framework/in_xsf.cpp
@@ -117,13 +117,20 @@
int infoBox(const in_char *file, HWND hwndParent)
{
- auto xSF = std::auto_ptr<XSFFile>(new XSFFile());
+ auto xSF = std::unique_ptr<XSFFile>(new XSFFile());
if (!file || !*file)
*xSF = *xSFFile;
else
{
- auto tmpxSF = std::auto_ptr<XSFFile>(new XSFFile(file));
- *xSF = *tmpxSF;
+ try
+ {
+ auto tmpxSF = std::unique_ptr<XSFFile>(new XSFFile(file));
+ *xSF = *tmpxSF;
+ }
+ catch (const std::exception &)
+ {
+ return INFOBOX_UNCHANGED;
+ }
}
// TODO: Eventually make a dialog box for editing the info
/*xSFFileInInfo = xSF.get();
@@ -151,7 +158,7 @@
{
try
{
- auto tmpxSFPlayer = std::auto_ptr<XSFPlayer>(XSFPlayer::Create(fn));
+ auto tmpxSFPlayer = std::unique_ptr<XSFPlayer>(XSFPlayer::Create(fn));
xSFConfig->CopyConfigToMemory(tmpxSFPlayer.get(), true);
if (!tmpxSFPlayer->Load())
return 1;
@@ -356,7 +363,7 @@
}
}
-std::auto_ptr<XSFFile> extendedXSFFile;
+std::unique_ptr<XSFFile> extendedXSFFile;
int wrapperWinampSetExtendedFileInfo(const char *data, const wchar_t *val)
{
@@ -391,7 +398,7 @@
return 0;
}
-intptr_t wrapperWinampGetExtendedRead_open(std::auto_ptr<XSFPlayer> tmpxSFPlayer, int *size, int *bps, int *nch, int *srate)
+intptr_t wrapperWinampGetExtendedRead_open(std::unique_ptr<XSFPlayer> tmpxSFPlayer, int *size, int *bps, int *nch, int *srate)
{
xSFConfig->CopyConfigToMemory(tmpxSFPlayer.get(), true);
if (!tmpxSFPlayer->Load())
@@ -411,14 +418,14 @@
extern "C" __declspec(dllexport) intptr_t winampGetExtendedRead_open(const char *fn, int *size, int *bps, int *nch, int *srate)
{
- auto tmpxSFPlayer = std::auto_ptr<XSFPlayer>(XSFPlayer::Create(fn));
- return wrapperWinampGetExtendedRead_open(tmpxSFPlayer, size, bps, nch, srate);
+ auto tmpxSFPlayer = std::unique_ptr<XSFPlayer>(XSFPlayer::Create(fn));
+ return wrapperWinampGetExtendedRead_open(std::move(tmpxSFPlayer), size, bps, nch, srate);
}
extern "C" __declspec(dllexport) intptr_t winampGetExtendedRead_openW(const wchar_t *fn, int *size, int *bps, int *nch, int *srate)
{
- auto tmpxSFPlayer = std::auto_ptr<XSFPlayer>(XSFPlayer::Create(fn));
- return wrapperWinampGetExtendedRead_open(tmpxSFPlayer, size, bps, nch, srate);
+ auto tmpxSFPlayer = std::unique_ptr<XSFPlayer>(XSFPlayer::Create(fn));
+ return wrapperWinampGetExtendedRead_open(std::move(tmpxSFPlayer), size, bps, nch, srate);
}
int extendedSeekNeeded = -1;
--- a/src/in_xsf_framework/ltstr.h
+++ b/src/in_xsf_framework/ltstr.h
@@ -31,7 +31,7 @@
{
for (int i = CHAR_MIN; i <= CHAR_MAX; ++i)
this->tab[i - CHAR_MIN] = static_cast<char>(i);
- std::use_facet<std::ctype<char> >(L).toupper(this->tab, this->tab + (CHAR_MAX - CHAR_MIN + 1));
+ std::use_facet<std::ctype<char>>(L).toupper(this->tab, this->tab + (CHAR_MAX - CHAR_MIN + 1));
}
bool operator()(const std::string &x, const std::string &y) const