aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsteve-lunarg <steve_gh@khasekhemwy.net>2016-10-20 23:56:45 -0600
committerJeremy Hayes <jeremy@lunarg.com>2016-10-21 14:51:43 -0600
commit4e3dd2087c4b2c4b6aae9205d5cc8655bddf95d9 (patch)
treedc7ada89e76febd0c4122916e7a6b0d219882e83
parent5d45eadedc37141d27100ce312af7125ec7058ab (diff)
downloadglslang-4e3dd2087c4b2c4b6aae9205d5cc8655bddf95d9.tar.gz
WIP: avoid strtok
-rw-r--r--StandAlone/ResourceLimits.cpp220
1 files changed, 115 insertions, 105 deletions
diff --git a/StandAlone/ResourceLimits.cpp b/StandAlone/ResourceLimits.cpp
index 8a5e6f37..10ede096 100644
--- a/StandAlone/ResourceLimits.cpp
+++ b/StandAlone/ResourceLimits.cpp
@@ -35,6 +35,7 @@
#include <cstdlib>
#include <cstring>
#include <sstream>
+#include <cctype>
#include "ResourceLimits.h"
@@ -240,208 +241,217 @@ std::string GetDefaultTBuiltInResourceString()
void DecodeResourceLimits(TBuiltInResource* resources, char* config)
{
- const char* delims = " \t\n\r";
-#pragma warning(suppress: 4996)
- const char* token = strtok(config, delims);
- while (token) {
-#pragma warning(suppress: 4996)
- const char* valueStr = strtok(0, delims);
- if (valueStr == 0 || ! (valueStr[0] == '-' || (valueStr[0] >= '0' && valueStr[0] <= '9'))) {
- printf("Error: '%s' bad .conf file. Each name must be followed by one number.\n", valueStr ? valueStr : "");
+ static const char* delims = " \t\n\r";
+
+ size_t pos = 0;
+ std::string configStr(config);
+
+ while ((pos = configStr.find_first_not_of(delims, pos)) != std::string::npos) {
+ const size_t token_s = pos;
+ const size_t token_e = configStr.find_first_of(delims, token_s);
+ const size_t value_s = configStr.find_first_not_of(delims, token_e);
+ const size_t value_e = configStr.find_first_of(delims, value_s);
+ pos = value_e;
+
+ // Faster to use compare(), but prefering readability.
+ const std::string tokenStr = configStr.substr(token_s, token_e-token_s);
+ const std::string valueStr = configStr.substr(value_s, value_e-value_s);
+
+ if (value_s == std::string::npos || ! (valueStr[0] == '-' || isdigit(valueStr[0]))) {
+ printf("Error: '%s' bad .conf file. Each name must be followed by one number.\n",
+ valueStr.c_str());
return;
}
- int value = atoi(valueStr);
- if (strcmp(token, "MaxLights") == 0)
+ const int value = std::stoi(valueStr);
+
+ if (tokenStr == "MaxLights")
resources->maxLights = value;
- else if (strcmp(token, "MaxClipPlanes") == 0)
+ else if (tokenStr == "MaxClipPlanes")
resources->maxClipPlanes = value;
- else if (strcmp(token, "MaxTextureUnits") == 0)
+ else if (tokenStr == "MaxTextureUnits")
resources->maxTextureUnits = value;
- else if (strcmp(token, "MaxTextureCoords") == 0)
+ else if (tokenStr == "MaxTextureCoords")
resources->maxTextureCoords = value;
- else if (strcmp(token, "MaxVertexAttribs") == 0)
+ else if (tokenStr == "MaxVertexAttribs")
resources->maxVertexAttribs = value;
- else if (strcmp(token, "MaxVertexUniformComponents") == 0)
+ else if (tokenStr == "MaxVertexUniformComponents")
resources->maxVertexUniformComponents = value;
- else if (strcmp(token, "MaxVaryingFloats") == 0)
+ else if (tokenStr == "MaxVaryingFloats")
resources->maxVaryingFloats = value;
- else if (strcmp(token, "MaxVertexTextureImageUnits") == 0)
+ else if (tokenStr == "MaxVertexTextureImageUnits")
resources->maxVertexTextureImageUnits = value;
- else if (strcmp(token, "MaxCombinedTextureImageUnits") == 0)
+ else if (tokenStr == "MaxCombinedTextureImageUnits")
resources->maxCombinedTextureImageUnits = value;
- else if (strcmp(token, "MaxTextureImageUnits") == 0)
+ else if (tokenStr == "MaxTextureImageUnits")
resources->maxTextureImageUnits = value;
- else if (strcmp(token, "MaxFragmentUniformComponents") == 0)
+ else if (tokenStr == "MaxFragmentUniformComponents")
resources->maxFragmentUniformComponents = value;
- else if (strcmp(token, "MaxDrawBuffers") == 0)
+ else if (tokenStr == "MaxDrawBuffers")
resources->maxDrawBuffers = value;
- else if (strcmp(token, "MaxVertexUniformVectors") == 0)
+ else if (tokenStr == "MaxVertexUniformVectors")
resources->maxVertexUniformVectors = value;
- else if (strcmp(token, "MaxVaryingVectors") == 0)
+ else if (tokenStr == "MaxVaryingVectors")
resources->maxVaryingVectors = value;
- else if (strcmp(token, "MaxFragmentUniformVectors") == 0)
+ else if (tokenStr == "MaxFragmentUniformVectors")
resources->maxFragmentUniformVectors = value;
- else if (strcmp(token, "MaxVertexOutputVectors") == 0)
+ else if (tokenStr == "MaxVertexOutputVectors")
resources->maxVertexOutputVectors = value;
- else if (strcmp(token, "MaxFragmentInputVectors") == 0)
+ else if (tokenStr == "MaxFragmentInputVectors")
resources->maxFragmentInputVectors = value;
- else if (strcmp(token, "MinProgramTexelOffset") == 0)
+ else if (tokenStr == "MinProgramTexelOffset")
resources->minProgramTexelOffset = value;
- else if (strcmp(token, "MaxProgramTexelOffset") == 0)
+ else if (tokenStr == "MaxProgramTexelOffset")
resources->maxProgramTexelOffset = value;
- else if (strcmp(token, "MaxClipDistances") == 0)
+ else if (tokenStr == "MaxClipDistances")
resources->maxClipDistances = value;
- else if (strcmp(token, "MaxComputeWorkGroupCountX") == 0)
+ else if (tokenStr == "MaxComputeWorkGroupCountX")
resources->maxComputeWorkGroupCountX = value;
- else if (strcmp(token, "MaxComputeWorkGroupCountY") == 0)
+ else if (tokenStr == "MaxComputeWorkGroupCountY")
resources->maxComputeWorkGroupCountY = value;
- else if (strcmp(token, "MaxComputeWorkGroupCountZ") == 0)
+ else if (tokenStr == "MaxComputeWorkGroupCountZ")
resources->maxComputeWorkGroupCountZ = value;
- else if (strcmp(token, "MaxComputeWorkGroupSizeX") == 0)
+ else if (tokenStr == "MaxComputeWorkGroupSizeX")
resources->maxComputeWorkGroupSizeX = value;
- else if (strcmp(token, "MaxComputeWorkGroupSizeY") == 0)
+ else if (tokenStr == "MaxComputeWorkGroupSizeY")
resources->maxComputeWorkGroupSizeY = value;
- else if (strcmp(token, "MaxComputeWorkGroupSizeZ") == 0)
+ else if (tokenStr == "MaxComputeWorkGroupSizeZ")
resources->maxComputeWorkGroupSizeZ = value;
- else if (strcmp(token, "MaxComputeUniformComponents") == 0)
+ else if (tokenStr == "MaxComputeUniformComponents")
resources->maxComputeUniformComponents = value;
- else if (strcmp(token, "MaxComputeTextureImageUnits") == 0)
+ else if (tokenStr == "MaxComputeTextureImageUnits")
resources->maxComputeTextureImageUnits = value;
- else if (strcmp(token, "MaxComputeImageUniforms") == 0)
+ else if (tokenStr == "MaxComputeImageUniforms")
resources->maxComputeImageUniforms = value;
- else if (strcmp(token, "MaxComputeAtomicCounters") == 0)
+ else if (tokenStr == "MaxComputeAtomicCounters")
resources->maxComputeAtomicCounters = value;
- else if (strcmp(token, "MaxComputeAtomicCounterBuffers") == 0)
+ else if (tokenStr == "MaxComputeAtomicCounterBuffers")
resources->maxComputeAtomicCounterBuffers = value;
- else if (strcmp(token, "MaxVaryingComponents") == 0)
+ else if (tokenStr == "MaxVaryingComponents")
resources->maxVaryingComponents = value;
- else if (strcmp(token, "MaxVertexOutputComponents") == 0)
+ else if (tokenStr == "MaxVertexOutputComponents")
resources->maxVertexOutputComponents = value;
- else if (strcmp(token, "MaxGeometryInputComponents") == 0)
+ else if (tokenStr == "MaxGeometryInputComponents")
resources->maxGeometryInputComponents = value;
- else if (strcmp(token, "MaxGeometryOutputComponents") == 0)
+ else if (tokenStr == "MaxGeometryOutputComponents")
resources->maxGeometryOutputComponents = value;
- else if (strcmp(token, "MaxFragmentInputComponents") == 0)
+ else if (tokenStr == "MaxFragmentInputComponents")
resources->maxFragmentInputComponents = value;
- else if (strcmp(token, "MaxImageUnits") == 0)
+ else if (tokenStr == "MaxImageUnits")
resources->maxImageUnits = value;
- else if (strcmp(token, "MaxCombinedImageUnitsAndFragmentOutputs") == 0)
+ else if (tokenStr == "MaxCombinedImageUnitsAndFragmentOutputs")
resources->maxCombinedImageUnitsAndFragmentOutputs = value;
- else if (strcmp(token, "MaxCombinedShaderOutputResources") == 0)
+ else if (tokenStr == "MaxCombinedShaderOutputResources")
resources->maxCombinedShaderOutputResources = value;
- else if (strcmp(token, "MaxImageSamples") == 0)
+ else if (tokenStr == "MaxImageSamples")
resources->maxImageSamples = value;
- else if (strcmp(token, "MaxVertexImageUniforms") == 0)
+ else if (tokenStr == "MaxVertexImageUniforms")
resources->maxVertexImageUniforms = value;
- else if (strcmp(token, "MaxTessControlImageUniforms") == 0)
+ else if (tokenStr == "MaxTessControlImageUniforms")
resources->maxTessControlImageUniforms = value;
- else if (strcmp(token, "MaxTessEvaluationImageUniforms") == 0)
+ else if (tokenStr == "MaxTessEvaluationImageUniforms")
resources->maxTessEvaluationImageUniforms = value;
- else if (strcmp(token, "MaxGeometryImageUniforms") == 0)
+ else if (tokenStr == "MaxGeometryImageUniforms")
resources->maxGeometryImageUniforms = value;
- else if (strcmp(token, "MaxFragmentImageUniforms") == 0)
+ else if (tokenStr == "MaxFragmentImageUniforms")
resources->maxFragmentImageUniforms = value;
- else if (strcmp(token, "MaxCombinedImageUniforms") == 0)
+ else if (tokenStr == "MaxCombinedImageUniforms")
resources->maxCombinedImageUniforms = value;
- else if (strcmp(token, "MaxGeometryTextureImageUnits") == 0)
+ else if (tokenStr == "MaxGeometryTextureImageUnits")
resources->maxGeometryTextureImageUnits = value;
- else if (strcmp(token, "MaxGeometryOutputVertices") == 0)
+ else if (tokenStr == "MaxGeometryOutputVertices")
resources->maxGeometryOutputVertices = value;
- else if (strcmp(token, "MaxGeometryTotalOutputComponents") == 0)
+ else if (tokenStr == "MaxGeometryTotalOutputComponents")
resources->maxGeometryTotalOutputComponents = value;
- else if (strcmp(token, "MaxGeometryUniformComponents") == 0)
+ else if (tokenStr == "MaxGeometryUniformComponents")
resources->maxGeometryUniformComponents = value;
- else if (strcmp(token, "MaxGeometryVaryingComponents") == 0)
+ else if (tokenStr == "MaxGeometryVaryingComponents")
resources->maxGeometryVaryingComponents = value;
- else if (strcmp(token, "MaxTessControlInputComponents") == 0)
+ else if (tokenStr == "MaxTessControlInputComponents")
resources->maxTessControlInputComponents = value;
- else if (strcmp(token, "MaxTessControlOutputComponents") == 0)
+ else if (tokenStr == "MaxTessControlOutputComponents")
resources->maxTessControlOutputComponents = value;
- else if (strcmp(token, "MaxTessControlTextureImageUnits") == 0)
+ else if (tokenStr == "MaxTessControlTextureImageUnits")
resources->maxTessControlTextureImageUnits = value;
- else if (strcmp(token, "MaxTessControlUniformComponents") == 0)
+ else if (tokenStr == "MaxTessControlUniformComponents")
resources->maxTessControlUniformComponents = value;
- else if (strcmp(token, "MaxTessControlTotalOutputComponents") == 0)
+ else if (tokenStr == "MaxTessControlTotalOutputComponents")
resources->maxTessControlTotalOutputComponents = value;
- else if (strcmp(token, "MaxTessEvaluationInputComponents") == 0)
+ else if (tokenStr == "MaxTessEvaluationInputComponents")
resources->maxTessEvaluationInputComponents = value;
- else if (strcmp(token, "MaxTessEvaluationOutputComponents") == 0)
+ else if (tokenStr == "MaxTessEvaluationOutputComponents")
resources->maxTessEvaluationOutputComponents = value;
- else if (strcmp(token, "MaxTessEvaluationTextureImageUnits") == 0)
+ else if (tokenStr == "MaxTessEvaluationTextureImageUnits")
resources->maxTessEvaluationTextureImageUnits = value;
- else if (strcmp(token, "MaxTessEvaluationUniformComponents") == 0)
+ else if (tokenStr == "MaxTessEvaluationUniformComponents")
resources->maxTessEvaluationUniformComponents = value;
- else if (strcmp(token, "MaxTessPatchComponents") == 0)
+ else if (tokenStr == "MaxTessPatchComponents")
resources->maxTessPatchComponents = value;
- else if (strcmp(token, "MaxPatchVertices") == 0)
+ else if (tokenStr == "MaxPatchVertices")
resources->maxPatchVertices = value;
- else if (strcmp(token, "MaxTessGenLevel") == 0)
+ else if (tokenStr == "MaxTessGenLevel")
resources->maxTessGenLevel = value;
- else if (strcmp(token, "MaxViewports") == 0)
+ else if (tokenStr == "MaxViewports")
resources->maxViewports = value;
- else if (strcmp(token, "MaxVertexAtomicCounters") == 0)
+ else if (tokenStr == "MaxVertexAtomicCounters")
resources->maxVertexAtomicCounters = value;
- else if (strcmp(token, "MaxTessControlAtomicCounters") == 0)
+ else if (tokenStr == "MaxTessControlAtomicCounters")
resources->maxTessControlAtomicCounters = value;
- else if (strcmp(token, "MaxTessEvaluationAtomicCounters") == 0)
+ else if (tokenStr == "MaxTessEvaluationAtomicCounters")
resources->maxTessEvaluationAtomicCounters = value;
- else if (strcmp(token, "MaxGeometryAtomicCounters") == 0)
+ else if (tokenStr == "MaxGeometryAtomicCounters")
resources->maxGeometryAtomicCounters = value;
- else if (strcmp(token, "MaxFragmentAtomicCounters") == 0)
+ else if (tokenStr == "MaxFragmentAtomicCounters")
resources->maxFragmentAtomicCounters = value;
- else if (strcmp(token, "MaxCombinedAtomicCounters") == 0)
+ else if (tokenStr == "MaxCombinedAtomicCounters")
resources->maxCombinedAtomicCounters = value;
- else if (strcmp(token, "MaxAtomicCounterBindings") == 0)
+ else if (tokenStr == "MaxAtomicCounterBindings")
resources->maxAtomicCounterBindings = value;
- else if (strcmp(token, "MaxVertexAtomicCounterBuffers") == 0)
+ else if (tokenStr == "MaxVertexAtomicCounterBuffers")
resources->maxVertexAtomicCounterBuffers = value;
- else if (strcmp(token, "MaxTessControlAtomicCounterBuffers") == 0)
+ else if (tokenStr == "MaxTessControlAtomicCounterBuffers")
resources->maxTessControlAtomicCounterBuffers = value;
- else if (strcmp(token, "MaxTessEvaluationAtomicCounterBuffers") == 0)
+ else if (tokenStr == "MaxTessEvaluationAtomicCounterBuffers")
resources->maxTessEvaluationAtomicCounterBuffers = value;
- else if (strcmp(token, "MaxGeometryAtomicCounterBuffers") == 0)
+ else if (tokenStr == "MaxGeometryAtomicCounterBuffers")
resources->maxGeometryAtomicCounterBuffers = value;
- else if (strcmp(token, "MaxFragmentAtomicCounterBuffers") == 0)
+ else if (tokenStr == "MaxFragmentAtomicCounterBuffers")
resources->maxFragmentAtomicCounterBuffers = value;
- else if (strcmp(token, "MaxCombinedAtomicCounterBuffers") == 0)
+ else if (tokenStr == "MaxCombinedAtomicCounterBuffers")
resources->maxCombinedAtomicCounterBuffers = value;
- else if (strcmp(token, "MaxAtomicCounterBufferSize") == 0)
+ else if (tokenStr == "MaxAtomicCounterBufferSize")
resources->maxAtomicCounterBufferSize = value;
- else if (strcmp(token, "MaxTransformFeedbackBuffers") == 0)
+ else if (tokenStr == "MaxTransformFeedbackBuffers")
resources->maxTransformFeedbackBuffers = value;
- else if (strcmp(token, "MaxTransformFeedbackInterleavedComponents") == 0)
+ else if (tokenStr == "MaxTransformFeedbackInterleavedComponents")
resources->maxTransformFeedbackInterleavedComponents = value;
- else if (strcmp(token, "MaxCullDistances") == 0)
+ else if (tokenStr == "MaxCullDistances")
resources->maxCullDistances = value;
- else if (strcmp(token, "MaxCombinedClipAndCullDistances") == 0)
+ else if (tokenStr == "MaxCombinedClipAndCullDistances")
resources->maxCombinedClipAndCullDistances = value;
- else if (strcmp(token, "MaxSamples") == 0)
+ else if (tokenStr == "MaxSamples")
resources->maxSamples = value;
-
- else if (strcmp(token, "nonInductiveForLoops") == 0)
+ else if (tokenStr == "nonInductiveForLoops")
resources->limits.nonInductiveForLoops = (value != 0);
- else if (strcmp(token, "whileLoops") == 0)
+ else if (tokenStr == "whileLoops")
resources->limits.whileLoops = (value != 0);
- else if (strcmp(token, "doWhileLoops") == 0)
+ else if (tokenStr == "doWhileLoops")
resources->limits.doWhileLoops = (value != 0);
- else if (strcmp(token, "generalUniformIndexing") == 0)
+ else if (tokenStr == "generalUniformIndexing")
resources->limits.generalUniformIndexing = (value != 0);
- else if (strcmp(token, "generalAttributeMatrixVectorIndexing") == 0)
+ else if (tokenStr == "generalAttributeMatrixVectorIndexing")
resources->limits.generalAttributeMatrixVectorIndexing = (value != 0);
- else if (strcmp(token, "generalVaryingIndexing") == 0)
+ else if (tokenStr == "generalVaryingIndexing")
resources->limits.generalVaryingIndexing = (value != 0);
- else if (strcmp(token, "generalSamplerIndexing") == 0)
+ else if (tokenStr == "generalSamplerIndexing")
resources->limits.generalSamplerIndexing = (value != 0);
- else if (strcmp(token, "generalVariableIndexing") == 0)
+ else if (tokenStr == "generalVariableIndexing")
resources->limits.generalVariableIndexing = (value != 0);
- else if (strcmp(token, "generalConstantMatrixVectorIndexing") == 0)
+ else if (tokenStr == "generalConstantMatrixVectorIndexing")
resources->limits.generalConstantMatrixVectorIndexing = (value != 0);
else
- printf("Warning: unrecognized limit (%s) in configuration file.\n", token);
+ printf("Warning: unrecognized limit (%s) in configuration file.\n", tokenStr.c_str());
-#pragma warning(suppress: 4996)
- token = strtok(0, delims);
}
}