Added expandable template for C++ launcher.
This commit is contained in:
parent
7b2fe537b7
commit
5544156030
|
@ -0,0 +1,21 @@
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
## Author: Shaun Reed ##
|
||||||
|
## Legal: All Content (c) 2019 Shaun Reed, all rights reserved ##
|
||||||
|
## ##
|
||||||
|
## Contact: shaunrd0@gmail.com | URL: www.shaunreed.com | GitHub: shaunrd0 ##
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
# Define the version of CMake
|
||||||
|
cmake_minimum_required(VERSION 2.8)
|
||||||
|
|
||||||
|
# Define the your project name
|
||||||
|
project(cpp-launcher)
|
||||||
|
|
||||||
|
# Include any directories the compiler may need
|
||||||
|
include_directories(./include)
|
||||||
|
|
||||||
|
# Point CMake to look for more CMakeLists within the following directories
|
||||||
|
add_subdirectory(src)
|
||||||
|
add_subdirectory(apps)
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
###############################################################################
|
||||||
|
## Author: Shaun Reed ##
|
||||||
|
## Legal: All Content (c) 2019 Shaun Reed, all rights reserved ##
|
||||||
|
## ##
|
||||||
|
## Contact: shaunrd0@gmail.com | URL: www.shaunreed.com | GitHub: shaunrd0 ##
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
# Create a reference / variable to refer to our source code
|
||||||
|
set(LAUNCHER_SRC launcher.cpp)
|
||||||
|
|
||||||
|
# Add our executable, naming it and linking it to our source code
|
||||||
|
add_executable(launcher ${LAUNCHER_SRC})
|
||||||
|
|
||||||
|
# Link to our custom library, defined in c-cmake/src/
|
||||||
|
target_link_libraries(launcher lib-launcher)
|
||||||
|
|
|
@ -0,0 +1,76 @@
|
||||||
|
/*#############################################################################
|
||||||
|
## Author: Shaun Reed ##
|
||||||
|
## Legal: All Content (c) 2019 Shaun Reed, all rights reserved ##
|
||||||
|
## ##
|
||||||
|
## Contact: shaunrd0@gmail.com | URL: www.shaunreed.com | GitHub: shaunrd0 ##
|
||||||
|
##############################################################################
|
||||||
|
## launcher.cpp
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <lib-launcher.hpp>
|
||||||
|
|
||||||
|
int main () {
|
||||||
|
// Because the launcher is this executable.. (main() will become our exe)
|
||||||
|
// Initialize the user choice to launcher problem at runtime
|
||||||
|
int pChoice = LAUNCH;
|
||||||
|
|
||||||
|
// Cast the integer pChoice into an assignment for our Problem enum
|
||||||
|
// No failsafes needed here since we know pChoice = LAUNCH
|
||||||
|
Problem pSelect = static_cast<Problem>(pChoice);
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
printf("\nWelcome to the cpp launcher!\n"
|
||||||
|
"Input the problem number to run the example.\n");
|
||||||
|
|
||||||
|
//ProblemList(); List and explain problem selection
|
||||||
|
//ProblemSelect(); Select problem, handle errors, return result to &pSelect
|
||||||
|
|
||||||
|
std::cin >> pChoice;
|
||||||
|
|
||||||
|
if(pChoice == LAUNCH)
|
||||||
|
{ // Ensure that pSelect = LAUNCH and restart
|
||||||
|
pSelect = static_cast<Problem>(pChoice);
|
||||||
|
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
|
||||||
|
RunProblem(pSelect);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else if ( pChoice > QTY )
|
||||||
|
{ // If we have entered a value too large, restart
|
||||||
|
std::printf("\nThe value you entered is too large."
|
||||||
|
"\nPlease enter a value below %d\n", QTY);
|
||||||
|
pSelect = Problem::Launch; // Set our launcher to restart and continue
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!std::cin )
|
||||||
|
{ // Check for cin error state
|
||||||
|
std::cin.clear();
|
||||||
|
std::cin.ignore();
|
||||||
|
pChoice = ERROR;
|
||||||
|
}
|
||||||
|
// One last input check for other error values
|
||||||
|
if (pChoice < EXIT) pChoice = ERROR;
|
||||||
|
|
||||||
|
// Cast the integer pChoice into an assignment for our Problem enum
|
||||||
|
pSelect = static_cast<Problem>(pChoice);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We should expect a clear input buffer at this point
|
||||||
|
* Clear cin up to next endline to prepare for the next input
|
||||||
|
* Depends on include <limits> for numeric_limits<streamsize>
|
||||||
|
*/
|
||||||
|
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
|
||||||
|
|
||||||
|
// Run the problem, print exit, or print error.
|
||||||
|
RunProblem(pSelect);
|
||||||
|
|
||||||
|
// Run loop until invalid or exit input recieved
|
||||||
|
} while (pChoice > EXIT || pChoice == LAUNCH);
|
||||||
|
// Exit the launcher if the selection is in range
|
||||||
|
// Exit if pSelect is set to ERROR state value
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
#!/bin/bash
|
||||||
|
## Author: Shaun Reed | Contact: shaunrd0@gmail.com | URL: www.shaunreed.com ##
|
||||||
|
## A custom bash script for building cmake projects. ##
|
||||||
|
## Intended to be ran in root directory of the project alongside CMakeLists ##
|
||||||
|
###############################################################################
|
||||||
|
|
||||||
|
# Infinite while loop - break on conditions
|
||||||
|
while true
|
||||||
|
do
|
||||||
|
|
||||||
|
printf "\nEnter 1 to build, 2 to cleanup previous build, 0 to exit.\n"
|
||||||
|
read bChoice
|
||||||
|
|
||||||
|
# Build loop
|
||||||
|
# If input read is == 1
|
||||||
|
if [ $bChoice -eq 1 ]
|
||||||
|
then
|
||||||
|
mkdir build
|
||||||
|
(cd build && cmake .. && cmake --build .)
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Clean-up loop
|
||||||
|
# If input read is == 2
|
||||||
|
if [ $bChoice -eq 2 ]
|
||||||
|
then
|
||||||
|
rm -Rv build/*
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Exit loops, all other input -
|
||||||
|
|
||||||
|
# If input read is >= 3, exit
|
||||||
|
if [ $bChoice -ge 3 ]
|
||||||
|
then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If input read is <= 0, exit
|
||||||
|
if [ $bChoice -le 0 ]
|
||||||
|
then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Bash will print an error if symbol or character input
|
||||||
|
|
||||||
|
done
|
||||||
|
|
|
@ -0,0 +1,37 @@
|
||||||
|
/*#############################################################################
|
||||||
|
## Author: Shaun Reed ##
|
||||||
|
## Legal: All Content (c) 2019 Shaun Reed, all rights reserved ##
|
||||||
|
## ##
|
||||||
|
## Contact: shaunrd0@gmail.com | URL: www.shaunreed.com | GitHub: shaunrd0 ##
|
||||||
|
##############################################################################
|
||||||
|
## lib-launcher.hpp
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <limits>
|
||||||
|
|
||||||
|
// Define our constants
|
||||||
|
// These are used for ranges within our control loops
|
||||||
|
const int QTY = 5;
|
||||||
|
const int EXIT = 0;
|
||||||
|
const int ERROR = -1;
|
||||||
|
const int LAUNCH = 99;
|
||||||
|
|
||||||
|
/* An enumeration for use with RunProblem() when selecting which problem to run
|
||||||
|
* This is meant to be expanded as needed.
|
||||||
|
* Be sure to add a corresponding case within RunProblem()
|
||||||
|
*
|
||||||
|
* @Launcher (LAUNCH 99) the value used for the launcher as a problem number
|
||||||
|
* @Exit (EXIT 0) is the normal exit index
|
||||||
|
* @Error (ERROR -1) is considered an error
|
||||||
|
*/
|
||||||
|
enum class Problem
|
||||||
|
{ Launch = 99, Error = -1, Exit, One, Two, Three, Four, Five };
|
||||||
|
|
||||||
|
/* This function allows for selection of the next problem to run.
|
||||||
|
*
|
||||||
|
* @param pSelect - The index to use within our enumeration.
|
||||||
|
* Allows for easy integer to problem selection.
|
||||||
|
*/
|
||||||
|
void RunProblem(Problem pSelect);
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
###############################################################################
|
||||||
|
## Author: Shaun Reed ##
|
||||||
|
## Legal: All Content (c) 2019 Shaun Reed, all rights reserved ##
|
||||||
|
## ##
|
||||||
|
## Contact: shaunrd0@gmail.com | URL: www.shaunreed.com | GitHub: shaunrd0 ##
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
# Create any links we might need
|
||||||
|
set(LIB_LAUNCHER_SRC lib-launcher.cpp)
|
||||||
|
|
||||||
|
# Define our library within CMake and link to the source code
|
||||||
|
add_library(lib-launcher ${LIB_LAUNCHER_SRC})
|
||||||
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
/*#############################################################################
|
||||||
|
## Author: Shaun Reed ##
|
||||||
|
## Legal: All Content (c) 2019 Shaun Reed, all rights reserved ##
|
||||||
|
## ##
|
||||||
|
## Contact: shaunrd0@gmail.com | URL: www.shaunreed.com | GitHub: shaunrd0 ##
|
||||||
|
##############################################################################
|
||||||
|
## lib-launcher.cpp
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <lib-launcher.hpp>
|
||||||
|
|
||||||
|
/* This function allows for selection of the next problem to run.
|
||||||
|
*
|
||||||
|
* @param pSelect - The index to use within our enumeration.
|
||||||
|
* Allows for easy integer to problem selection.
|
||||||
|
*/
|
||||||
|
void RunProblem(Problem pSelect) {
|
||||||
|
|
||||||
|
switch (pSelect) {
|
||||||
|
|
||||||
|
case Problem::One:
|
||||||
|
std::printf("\nYou are on problem 1!\n"
|
||||||
|
"Press enter to continue.");
|
||||||
|
std::cin.ignore();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Problem::Two:
|
||||||
|
std::printf("\nYou are on problem 2!\n"
|
||||||
|
"Press enter to continue.");
|
||||||
|
std::cin.ignore();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Problem::Three:
|
||||||
|
std::printf("\nYou are on problem 3!\n"
|
||||||
|
"Press enter to continue.");
|
||||||
|
std::cin.ignore();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Problem::Four:
|
||||||
|
std::printf("\nYou are on problem 4!\n"
|
||||||
|
"Press enter to continue.");
|
||||||
|
std::cin.ignore();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Problem::Five:
|
||||||
|
std::printf("\nYou are on problem 5!\n"
|
||||||
|
"Press enter to continue.");
|
||||||
|
std::cin.get();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Problem::Exit:
|
||||||
|
std::printf("\nYou are on problem 0! This is a safe exit.\n"
|
||||||
|
"Press enter to continue.");
|
||||||
|
std::cin.ignore();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Problem::Error:
|
||||||
|
std::printf("\nYou are on problem -1! This is considered and error.\n"
|
||||||
|
"Press enter to exit.");
|
||||||
|
std::cin.ignore();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case Problem::Launch:
|
||||||
|
// Do nothing, break and let main() restart the launcher
|
||||||
|
std::printf("\nRestarting the launcher...\n"
|
||||||
|
"Press enter to continue.");
|
||||||
|
std::cin.ignore();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
std::printf("\nYou have entered an invalid value."
|
||||||
|
"\nPress Enter to try again.");
|
||||||
|
//ProblemList();
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue