mirror of
https://github.com/libretro/scummvm.git
synced 2025-03-06 18:27:26 +00:00
ULTIMA8: Revert back to original's use of reverse iterators
This commit is contained in:
parent
06f0ba188f
commit
322a6f0b0f
@ -224,8 +224,8 @@ KeyMap ConfigFileManager::listKeyValues(istring section,
|
||||
|
||||
|
||||
INIFile *ConfigFileManager::findKeyINI(istring key) {
|
||||
for (std::vector<INIFile *>::iterator i = inifiles.end();
|
||||
i != inifiles.begin(); --i) {
|
||||
for (std::vector<INIFile *>::reverse_iterator i = inifiles.rbegin();
|
||||
i != inifiles.rend(); ++i) {
|
||||
if ((*i)->hasKey(key))
|
||||
return (*i);
|
||||
}
|
||||
@ -234,8 +234,8 @@ INIFile *ConfigFileManager::findKeyINI(istring key) {
|
||||
}
|
||||
|
||||
INIFile *ConfigFileManager::findWriteINI(istring key) {
|
||||
for (std::vector<INIFile *>::iterator i = inifiles.end();
|
||||
i != inifiles.begin(); --i) {
|
||||
for (std::vector<INIFile *>::reverse_iterator i = inifiles.rbegin();
|
||||
i != inifiles.rend(); ++i) {
|
||||
if (!(*i)->isReadonly() && (*i)->checkRoot(key))
|
||||
return (*i);
|
||||
}
|
||||
|
@ -23,6 +23,18 @@
|
||||
namespace Ultima8 {
|
||||
|
||||
static const Ultima8GameDescription gameDescriptions[] = {
|
||||
{
|
||||
{
|
||||
"ultima8",
|
||||
"Gold Edition",
|
||||
AD_ENTRY1s("dosboxULTIMA8.conf", "ae990ff69c20bd5fc25ed1edb73ef015", 11448),
|
||||
Common::EN_ANY,
|
||||
Common::kPlatformDOS,
|
||||
0,
|
||||
GUIO1(GUIO_NOMIDI)
|
||||
},
|
||||
},
|
||||
|
||||
{ AD_TABLE_END_MARKER }
|
||||
};
|
||||
|
||||
|
@ -123,8 +123,8 @@ bool FileSystem::base_to_uppercase(string &str, int count) {
|
||||
|
||||
int todo = count;
|
||||
// Go backwards.
|
||||
string::iterator X;
|
||||
for (X = str.end(); X >= str.begin(); --X) {
|
||||
string::reverse_iterator X;
|
||||
for (X = str.rend(); X != str.rbegin(); ++X) {
|
||||
// Stop at separator.
|
||||
if (*X == '/' || *X == '\\' || *X == ':')
|
||||
todo--;
|
||||
@ -137,7 +137,7 @@ bool FileSystem::base_to_uppercase(string &str, int count) {
|
||||
*X = static_cast<char>(std::toupper(*X));
|
||||
#endif
|
||||
}
|
||||
if (X >= str.begin())
|
||||
if (X == str.rend())
|
||||
todo--; // start of pathname counts as separator too
|
||||
|
||||
// false if it didn't reach 'count' parts
|
||||
|
@ -170,10 +170,10 @@ uint16 ContainerGump::TraceObjId(int mx, int my) {
|
||||
bool paintEditorItems = Ultima8Engine::get_instance()->isPaintEditorItems();
|
||||
|
||||
std::list<Item *> &contents = c->contents;
|
||||
std::list<Item *>::iterator iter;
|
||||
std::list<Item *>::reverse_iterator iter;
|
||||
|
||||
// iterate backwards, since we're painting from begin() to end()
|
||||
for (iter = contents.end(); iter != contents.begin(); --iter) {
|
||||
for (iter = contents.rbegin(); iter != contents.rend(); ++iter) {
|
||||
Item *item = *iter;
|
||||
if (!paintEditorItems && item->getShapeInfo()->is_editor())
|
||||
continue;
|
||||
|
@ -127,12 +127,12 @@ void Gump::Close(bool no_del) {
|
||||
|
||||
void Gump::RenderSurfaceChanged() {
|
||||
// Iterate all children
|
||||
std::list<Gump *>::iterator it = children.end();
|
||||
std::list<Gump *>::iterator begin = children.begin();
|
||||
std::list<Gump *>::reverse_iterator it = children.rbegin();
|
||||
std::list<Gump *>::reverse_iterator end = children.rend();
|
||||
|
||||
while (it != begin) {
|
||||
while (it != end) {
|
||||
(*it)->RenderSurfaceChanged();
|
||||
--it;
|
||||
++it;
|
||||
}
|
||||
}
|
||||
|
||||
@ -190,12 +190,12 @@ void Gump::CloseItemDependents() {
|
||||
bool Gump::GetMouseCursor(int mx, int my, Shape &shape_, int32 &frame) {
|
||||
ParentToGump(mx, my);
|
||||
|
||||
|
||||
bool ret = false;
|
||||
|
||||
// This reverse iterates the children
|
||||
std::list<Gump *>::iterator it;
|
||||
for (it = children.end(); it != children.begin(); --it) {
|
||||
std::list<Gump *>::reverse_iterator it;
|
||||
for (it = children.rbegin(); it != children.rend(); ++it)
|
||||
{
|
||||
Gump *g = *it;
|
||||
|
||||
// Not if closing
|
||||
@ -307,16 +307,16 @@ void Gump::PaintCompositing(RenderSurface *surf, int32 lerp_factor,
|
||||
surf->SetClippingRect(new_rect);
|
||||
|
||||
// Iterate all children
|
||||
std::list<Gump *>::iterator it = children.end();
|
||||
std::list<Gump *>::iterator begin = children.begin();
|
||||
std::list<Gump *>::reverse_iterator it = children.rbegin();
|
||||
std::list<Gump *>::reverse_iterator end = children.rend();
|
||||
|
||||
while (it != begin) {
|
||||
while (it != end) {
|
||||
Gump *g = *it;
|
||||
// Paint if not closing
|
||||
if (!g->IsClosing())
|
||||
g->PaintCompositing(surf, lerp_factor, sx, sy);
|
||||
|
||||
--it;
|
||||
++it;
|
||||
}
|
||||
|
||||
// Paint This
|
||||
@ -338,13 +338,13 @@ Gump *Gump::FindGump(int mx, int my) {
|
||||
Gump *gump = 0;
|
||||
|
||||
// Iterate all children
|
||||
std::list<Gump *>::iterator it = children.end();
|
||||
std::list<Gump *>::iterator begin = children.begin();
|
||||
std::list<Gump *>::reverse_iterator it = children.rbegin();
|
||||
std::list<Gump *>::reverse_iterator end = children.rend();
|
||||
|
||||
while (it != begin && !gump) {
|
||||
while (it != end && !gump) {
|
||||
Gump *g = *it;
|
||||
gump = g->FindGump(gx, gy);
|
||||
--it;
|
||||
++it;
|
||||
}
|
||||
|
||||
// it's over a child
|
||||
@ -411,8 +411,8 @@ bool Gump::PointOnGump(int mx, int my) {
|
||||
}
|
||||
|
||||
// reverse-iterate children
|
||||
std::list<Gump *>::iterator it;
|
||||
for (it = children.end(); it != children.begin(); --it) {
|
||||
std::list<Gump *>::reverse_iterator it;
|
||||
for (it = children.rbegin(); it != children.rend(); ++it) {
|
||||
Gump *g = *it;
|
||||
|
||||
// It's got the point
|
||||
@ -498,17 +498,17 @@ uint16 Gump::TraceObjId(int mx, int my) {
|
||||
uint16 objId_ = 0;
|
||||
|
||||
// reverse-iterate children
|
||||
std::list<Gump *>::iterator it;
|
||||
for (it = children.end(); it != children.begin(); --it) {
|
||||
std::list<Gump *>::reverse_iterator it;
|
||||
for (it = children.rbegin(); it != children.rend(); ++it) {
|
||||
Gump *g = *it;
|
||||
|
||||
// Not if closing
|
||||
if (g->flags & FLAG_CLOSING) continue;
|
||||
|
||||
// It's got the point
|
||||
if (g->PointOnGump(gx, gy)) objId_ = g->TraceObjId(gx, gy);
|
||||
if (g->PointOnGump(gx, gy)) objid = g->TraceObjId(gx, gy);
|
||||
|
||||
if (objId_ && objId_ != 65535) break;
|
||||
if (objid && objid != 65535) break;
|
||||
}
|
||||
|
||||
// if (!objId_ || objId_ == 65535)
|
||||
@ -581,9 +581,9 @@ void Gump::FindNewFocusChild() {
|
||||
focus_child = 0;
|
||||
|
||||
// Now add the gump to use as the new focus
|
||||
std::list<Gump *>::iterator it = children.end();
|
||||
std::list<Gump *>::reverse_iterator it = children.rbegin();
|
||||
|
||||
if (it != children.begin()) {
|
||||
if (it != children.rend()) {
|
||||
(*it)->MakeFocus();
|
||||
}
|
||||
}
|
||||
@ -689,8 +689,8 @@ Gump *Gump::OnMouseDown(int button, int mx, int my) {
|
||||
Gump *handled = 0;
|
||||
|
||||
// Iterate children backwards
|
||||
std::list<Gump *>::iterator it;
|
||||
for (it = children.end(); it != children.begin(); --it) {
|
||||
std::list<Gump *>::reverse_iterator it;
|
||||
for (it = children.rbegin(); it != children.rend(); ++it) {
|
||||
Gump *g = *it;
|
||||
|
||||
// Not if closing
|
||||
@ -712,8 +712,8 @@ Gump *Gump::OnMouseMotion(int mx, int my) {
|
||||
Gump *handled = 0;
|
||||
|
||||
// Iterate children backwards
|
||||
std::list<Gump *>::iterator it;
|
||||
for (it = children.end(); it != children.begin(); --it) {
|
||||
std::list<Gump *>::reverse_iterator it;
|
||||
for (it = children.rbegin(); it != children.rend(); ++it) {
|
||||
Gump *g = *it;
|
||||
|
||||
// Not if closing
|
||||
|
@ -87,16 +87,16 @@ void ScalerGump::Paint(RenderSurface *surf, int32 lerp_factor, bool scaled) {
|
||||
int32 scaley = (height << 16) / sheight1;
|
||||
|
||||
// Iterate all children
|
||||
std::list<Gump *>::iterator it = children.end();
|
||||
std::list<Gump *>::iterator begin = children.begin();
|
||||
std::list<Gump *>::reverse_iterator it = children.rbegin();
|
||||
std::list<Gump *>::reverse_iterator end = children.rend();
|
||||
|
||||
while (it != begin) {
|
||||
while (it != end) {
|
||||
Gump *g = *it;
|
||||
// Paint if not closing
|
||||
if (!g->IsClosing())
|
||||
g->PaintCompositing(surf, lerp_factor, scalex, scaley);
|
||||
|
||||
--it;
|
||||
++it;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -35,6 +35,29 @@ namespace std {
|
||||
|
||||
template<class T>
|
||||
class vector : public Common::Array<T> {
|
||||
public:
|
||||
struct reverse_iterator {
|
||||
private:
|
||||
vector<T> *_owner;
|
||||
int _index;
|
||||
public:
|
||||
reverse_iterator(vector<T> *owner, int index) : _owner(owner), _index(index) {}
|
||||
reverse_iterator() : _owner(nullptr), _index(-1) {}
|
||||
|
||||
T operator*() const { return (*_owner)[_index]; }
|
||||
|
||||
reverse_iterator &operator++() {
|
||||
--_index;
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool operator==(const reverse_iterator &rhs) {
|
||||
return _owner == rhs._owner && _index == rhs._index;
|
||||
}
|
||||
bool operator!=(const reverse_iterator &rhs) {
|
||||
return !operator==(rhs);
|
||||
}
|
||||
};
|
||||
public:
|
||||
typedef T reference;
|
||||
typedef const T const_reference;
|
||||
@ -64,6 +87,13 @@ public:
|
||||
SWAP(this->_size, arr._size);
|
||||
SWAP(this->_storage, arr._storage);
|
||||
}
|
||||
|
||||
reverse_iterator rbegin() {
|
||||
return reverse_iterator(this, (int)Common::Array<T>::size() - 1);
|
||||
}
|
||||
reverse_iterator rend() {
|
||||
return reverse_iterator(this, -1);
|
||||
}
|
||||
};
|
||||
|
||||
template<class T>
|
||||
@ -117,14 +147,39 @@ template<class VAL>
|
||||
class deque : public Common::List<VAL> {
|
||||
};
|
||||
|
||||
template<class VAL>
|
||||
class list : public Common::List<VAL> {
|
||||
template<class T>
|
||||
class list : public Common::List<T> {
|
||||
public:
|
||||
typename Common::List<VAL>::iterator insert(typename Common::List<VAL>::iterator pos,
|
||||
const VAL &element) {
|
||||
Common::List<VAL>::insert(pos, element);
|
||||
struct reverse_iterator {
|
||||
private:
|
||||
typename Common::List<T>::iterator _it;
|
||||
public:
|
||||
reverse_iterator(typename Common::List<T>::iterator it) : _it(it) {}
|
||||
reverse_iterator() {}
|
||||
|
||||
T operator*() const { return *_it; }
|
||||
|
||||
reverse_iterator &operator++() {
|
||||
--_it;
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool operator==(const reverse_iterator &rhs) { return _it == rhs._it; }
|
||||
bool operator!=(const reverse_iterator &rhs) { return _it != rhs._it; }
|
||||
};
|
||||
public:
|
||||
typename Common::List<T>::iterator insert(typename Common::List<T>::iterator pos,
|
||||
const T &element) {
|
||||
Common::List<T>::insert(pos, element);
|
||||
return pos;
|
||||
}
|
||||
|
||||
reverse_iterator rbegin() {
|
||||
return reverse_iterator(Common::List<T>::reverse_begin());
|
||||
}
|
||||
reverse_iterator rend() {
|
||||
return reverse_iterator(Common::List<T>::end());
|
||||
}
|
||||
};
|
||||
|
||||
template<class VAL>
|
||||
|
@ -32,6 +32,29 @@ class string : public Common::String {
|
||||
public:
|
||||
typedef size_t size_type;
|
||||
static const size_type npos = (size_type) - 1;
|
||||
|
||||
struct reverse_iterator {
|
||||
private:
|
||||
string *_owner;
|
||||
int _index;
|
||||
public:
|
||||
reverse_iterator(string *owner, int index) : _owner(owner), _index(index) {}
|
||||
reverse_iterator() : _owner(nullptr), _index(-1) {}
|
||||
|
||||
char &operator*() const { return (*_owner)[_index]; }
|
||||
|
||||
reverse_iterator &operator++() {
|
||||
--_index;
|
||||
return *this;
|
||||
}
|
||||
|
||||
bool operator==(const reverse_iterator &rhs) {
|
||||
return _owner == rhs._owner && _index == rhs._index;
|
||||
}
|
||||
bool operator!=(const reverse_iterator &rhs) {
|
||||
return !operator==(rhs);
|
||||
}
|
||||
};
|
||||
public:
|
||||
string() : Common::String() {}
|
||||
string(const char *str) : Common::String(str) {}
|
||||
@ -141,6 +164,13 @@ public:
|
||||
void append(const string &str) {
|
||||
*this += str;
|
||||
}
|
||||
|
||||
reverse_iterator rbegin() {
|
||||
return reverse_iterator(this, (int)size() - 1);
|
||||
}
|
||||
reverse_iterator rend() {
|
||||
return reverse_iterator(this, -1);
|
||||
}
|
||||
};
|
||||
|
||||
extern const char *const endl;
|
||||
|
Loading…
x
Reference in New Issue
Block a user