diff options
author | Peter Keresztes Schmidt <carbenium@outlook.com> | 2020-08-20 00:46:52 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-08-20 00:46:52 +0200 |
commit | 4286e7aa02e777268b25d8a5bcc1ee87f7b16c4d (patch) | |
tree | 13c9a4c4be3ae749a0301f0e397051a98a10f339 /contrib | |
parent | 9c9e8c7d58cd0e939330089cfb555945ebbf73eb (diff) |
Core/ChatCommands: Check whether a passed numeric enum value is valid (#25285)
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/enumutils_describe.py | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/contrib/enumutils_describe.py b/contrib/enumutils_describe.py index 630fe86c1f0..443b8ba430c 100644 --- a/contrib/enumutils_describe.py +++ b/contrib/enumutils_describe.py @@ -1,6 +1,5 @@ from re import compile, MULTILINE from os import walk, getcwd -from datetime import datetime notice = ('''/* * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information @@ -109,9 +108,7 @@ def processFile(path, filename): output.write('#include "SmartEnum.h"\n') output.write('#include <stdexcept>\n') output.write('\n') - output.write('namespace Trinity\n') - output.write('{\n') - output.write('namespace Impl\n') + output.write('namespace Trinity::Impl\n') output.write('{\n') for name, values in enums: tag = ('data for enum \'%s\' in \'%s.h\' auto-generated' % (name, filename)) @@ -130,10 +127,10 @@ def processFile(path, filename): output.write(' }\n') output.write('}\n') output.write('\n') - output.write('template <>\n'); + output.write('template <>\n') output.write('TC_API_EXPORT size_t EnumUtils<%s>::Count() { return %d; }\n' % (name, len(values))) output.write('\n') - output.write('template <>\n'); + output.write('template <>\n') output.write('TC_API_EXPORT %s EnumUtils<%s>::FromIndex(size_t index)\n' % (name, name)) output.write('{\n') output.write(' switch (index)\n') @@ -143,9 +140,19 @@ def processFile(path, filename): output.write(' default: throw std::out_of_range("index");\n') output.write(' }\n') output.write('}\n') + output.write('\n') + output.write('template <>\n') + output.write('TC_API_EXPORT size_t EnumUtils<%s>::ToIndex(%s value)\n' % (name, name)) + output.write('{\n') + output.write(' switch (value)\n') + output.write(' {\n') + for i in range(len(values)): + output.write(' case %s: return %d;\n' % (values[i][0], i)) + output.write(' default: throw std::out_of_range("value");\n') + output.write(' }\n') + output.write('}\n') output.write('}\n') - output.write('}\n') FilenamePattern = compile(r'^(.+).h$') for root, dirs, files in walk('.'): |