diff options
author | Wohlstand <admin@wohlnet.ru> | 2017-11-13 04:52:25 +0300 |
---|---|---|
committer | Wohlstand <admin@wohlnet.ru> | 2017-11-13 04:52:25 +0300 |
commit | 9352de797b9f2bceb77a7dfb0229c01f0ac1cd0d (patch) | |
tree | 82aad257a3e9c0ae03cdee4e9b867eb42e92bffd /cmake/openwattcom-dos/custom-h/myset.h | |
parent | b043032a89f38e2b3191a65dab9ae4e8202d48f3 (diff) | |
download | libADLMIDI-9352de797b9f2bceb77a7dfb0229c01f0ac1cd0d.tar.gz libADLMIDI-9352de797b9f2bceb77a7dfb0229c01f0ac1cd0d.tar.bz2 libADLMIDI-9352de797b9f2bceb77a7dfb0229c01f0ac1cd0d.zip |
Continue attempt to make library and demo player runnable under OpenWatcom
Because of broken STL containers, are very hard crashes in random places are can't be fixed with a full customizing of those containers.
Diffstat (limited to 'cmake/openwattcom-dos/custom-h/myset.h')
-rw-r--r-- | cmake/openwattcom-dos/custom-h/myset.h | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/cmake/openwattcom-dos/custom-h/myset.h b/cmake/openwattcom-dos/custom-h/myset.h new file mode 100644 index 0000000..c5e581d --- /dev/null +++ b/cmake/openwattcom-dos/custom-h/myset.h @@ -0,0 +1,90 @@ +/* +PtrList - A custom STD::Vector implementation. Workaround for OpenWatcom's crashing implementation + +Copyright (c) 2017 Vitaliy Novichkov <admin@wohlnet.ru> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the "Software"), +to deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. +*/ + +#ifndef MYSET_H +#define MYSET_H + +#include <vector> + +//WORKAROUND: use custom vector implementation to avoid lots of crashes!!! +#define _SET_INCLUDED +//#define set MySet + +namespace std +{ + +template<class T, class Allocator = allocator< T >, class Implementation = vector<T, Allocator> > +class set : public Implementation +{ +public: + set() : Implementation() {} + ~set() {} + + iterator find(const T& val) + { + for(iterator it = begin(); it != end(); it++) + { + if(val == *it) + return it; + } + return end(); + } + + void insert (const T& val) + { + iterator f = find(val); + if(f != end()) + { + Implementation::insert(end(), val); + } + } + + void erase(const T& val) + { + iterator f = find(val); + if(f != end()) + { + Implementation::erase(f); + } + } + + //@{ + /** + * @brief Finds the number of elements. + * @param __x Element to located. + * @return Number of elements with specified key. + * + * This function only makes sense for multisets; for set the result will + * either be 0 (not present) or 1 (present). + */ + size_t + count(const T& __x) + { + return find(__x) == Implementation::end() ? 0 : 1; + } +}; + +} + +#endif // MYSET_H |