diff options
author | RichieSams | 2013-10-01 18:46:57 -0500 |
---|---|---|
committer | RichieSams | 2013-10-02 09:09:57 -0500 |
commit | b913e9f8a330328a6600539ecd03754e19560f97 (patch) | |
tree | 4b9c044f176b55adf98945cd9d43e2b72a2cb35a /engines | |
parent | 1f9ba897b8aa8afe776928ecd5ca480b8b2fc3a8 (diff) | |
download | scummvm-rg350-b913e9f8a330328a6600539ecd03754e19560f97.tar.gz scummvm-rg350-b913e9f8a330328a6600539ecd03754e19560f97.tar.bz2 scummvm-rg350-b913e9f8a330328a6600539ecd03754e19560f97.zip |
ZVISION: Update removeDuplicateEntries to preserve order
The new algorithm is potentially slower, but it doesn't need
to use sort. Speed shouldn't be a problem because the function
isn't used that often and in each case the size of the container
is small.
Diffstat (limited to 'engines')
-rw-r--r-- | engines/zvision/utility.h | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/engines/zvision/utility.h b/engines/zvision/utility.h index af47de7fe0..14077080f5 100644 --- a/engines/zvision/utility.h +++ b/engines/zvision/utility.h @@ -61,20 +61,34 @@ void trimCommentsAndWhiteSpace(Common::String *string); void dumpEveryResultAction(const Common::String &destFile); /** - * Removes all duplicate entries from container. + * Removes all duplicate entries from container. Relative order will be preserved. * - * @param container - * @return + * @param container The Array to remove duplicate entries from */ template<class T> void removeDuplicateEntries(Common::Array<T> &container) { - Common::sort(container.begin(), container.end()); + // Length of modified array + int newLength = 1; + int j; + + for(int i = 1; i < container.size(); i++) { + for(j = 0; j < newLength; j++) { + if (container[i] == container[j]) { + break; + } + } - for (uint i = 0; i + 1 < container.size(); ++i) { - while (i + 1 < container.size() && container[i] == container[i + 1]) { - container.remove_at(i + 1); + // If none of the values in index[0..j] of container are the same as array[i], + // then copy the current value to corresponding new position in array + if (j == newLength) { + container[newLength++] = container[i]; } } + + // Actually remove the unneeded space + while (container.size() < newLength) { + container.pop_back(); + } } /** |