diff --git a/src/strings.cpp b/src/strings.cpp index e14056758a..b4ce13926e 100644 --- a/src/strings.cpp +++ b/src/strings.cpp @@ -72,26 +72,28 @@ void StringParameters::PrepareForNextRun() /** - * Read an int64 from the argument array. The offset is increased - * so the next time GetInt64 is called the next value is read. + * Get the next parameter from our parameters. + * This updates the offset, so the next time this is called the next parameter + * will be read. + * @return The pointer to the next parameter. */ -int64 StringParameters::GetInt64() +StringParameter *StringParameters::GetNextParameterPointer() { assert(this->next_type == 0 || (SCC_CONTROL_START <= this->next_type && this->next_type <= SCC_CONTROL_END)); if (this->offset >= this->parameters.size()) { Debug(misc, 0, "Trying to read invalid string parameter"); - return 0; + return nullptr; } auto ¶m = this->parameters[this->offset++]; if (param.type != 0 && param.type != this->next_type) { Debug(misc, 0, "Trying to read string parameter with wrong type"); this->next_type = 0; - return 0; + return nullptr; } - param.type = next_type; + param.type = this->next_type; this->next_type = 0; - return param.data; + return ¶m; } diff --git a/src/strings_internal.h b/src/strings_internal.h index 33306aa1e0..c79551fde8 100644 --- a/src/strings_internal.h +++ b/src/strings_internal.h @@ -32,6 +32,8 @@ protected: parameters(parameters) {} + StringParameter *GetNextParameterPointer(); + public: /** * Create a new StringParameters instance that can reference part of the data of @@ -77,12 +79,28 @@ public: this->offset = offset; } - int64 GetInt64(); + /** + * Get the next parameter from our parameters. + * This updates the offset, so the next time this is called the next parameter + * will be read. + * @return The next parameter's value. + */ + template + T GetNextParameter() + { + auto ptr = GetNextParameterPointer(); + return static_cast(ptr == nullptr ? 0 : ptr->data); + } + + int64 GetInt64() + { + return GetNextParameter(); + } /** Read an int32 from the argument array. @see GetInt64. */ int32 GetInt32() { - return (int32)this->GetInt64(); + return GetNextParameter(); } /**