summaryrefslogtreecommitdiffstats
path: root/Source/CTest/cmCTestProcessesLexerHelper.cxx
diff options
context:
space:
mode:
authorKyle Edwards <kyle.edwards@kitware.com>2019-06-27 20:38:19 (GMT)
committerBrad King <brad.king@kitware.com>2019-10-02 13:33:54 (GMT)
commitbb4a1410592342a824b1dd755b7ca8897deac65c (patch)
tree9131b8f3b5e531a9fb5471a0b77e9d0b121f5f00 /Source/CTest/cmCTestProcessesLexerHelper.cxx
parenta1f78a481c8cbda1f0c8503c4d661c3c3ddf00a6 (diff)
downloadCMake-bb4a1410592342a824b1dd755b7ca8897deac65c.zip
CMake-bb4a1410592342a824b1dd755b7ca8897deac65c.tar.gz
CMake-bb4a1410592342a824b1dd755b7ca8897deac65c.tar.bz2
CTest: Add lexer for PROCESSES property
Diffstat (limited to 'Source/CTest/cmCTestProcessesLexerHelper.cxx')
-rw-r--r--Source/CTest/cmCTestProcessesLexerHelper.cxx55
1 files changed, 55 insertions, 0 deletions
diff --git a/Source/CTest/cmCTestProcessesLexerHelper.cxx b/Source/CTest/cmCTestProcessesLexerHelper.cxx
new file mode 100644
index 0000000..797164b
--- /dev/null
+++ b/Source/CTest/cmCTestProcessesLexerHelper.cxx
@@ -0,0 +1,55 @@
+/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
+ file Copyright.txt or https://cmake.org/licensing for details. */
+#include "cmCTestProcessesLexerHelper.h"
+
+#include "cmCTestProcessesLexer.h"
+#include "cmCTestTestHandler.h"
+
+cmCTestProcessesLexerHelper::cmCTestProcessesLexerHelper(
+ std::vector<std::vector<cmCTestTestHandler::cmCTestTestResourceRequirement>>&
+ output)
+ : Output(output)
+{
+}
+
+bool cmCTestProcessesLexerHelper::ParseString(const std::string& value)
+{
+ yyscan_t lexer;
+ cmCTestProcesses_yylex_init_extra(this, &lexer);
+
+ auto state = cmCTestProcesses_yy_scan_string(value.c_str(), lexer);
+ int retval = cmCTestProcesses_yylex(lexer);
+ cmCTestProcesses_yy_delete_buffer(state, lexer);
+
+ cmCTestProcesses_yylex_destroy(lexer);
+ return retval == 0;
+}
+
+void cmCTestProcessesLexerHelper::SetProcessCount(unsigned int count)
+{
+ this->ProcessCount = count;
+}
+
+void cmCTestProcessesLexerHelper::SetResourceType(const std::string& type)
+{
+ this->ResourceType = type;
+}
+
+void cmCTestProcessesLexerHelper::SetNeededSlots(int count)
+{
+ this->NeededSlots = count;
+}
+
+void cmCTestProcessesLexerHelper::WriteRequirement()
+{
+ this->Process.push_back({ this->ResourceType, this->NeededSlots, 1 });
+}
+
+void cmCTestProcessesLexerHelper::WriteProcess()
+{
+ for (unsigned int i = 0; i < this->ProcessCount; ++i) {
+ this->Output.push_back(this->Process);
+ }
+ this->Process.clear();
+ this->ProcessCount = 1;
+}