Move all variables to the controller interface.

This commit is contained in:
2025-01-27 23:46:26 +01:00
parent 3bcb5b95e7
commit d8636d07f4
12 changed files with 150 additions and 140 deletions

View File

@ -11,61 +11,61 @@ import (
func (flags *Flags) ParseFlags() {
// Define parameters
flag.StringVar(&flags.Row1, "row1", "000000000", "1st row of the sudoku puzzle.")
flag.StringVar(&flags.Row2, "row2", "000000000", "2nd row of the sudoku puzzle.")
flag.StringVar(&flags.Row3, "row3", "000000000", "4rd row of the sudoku puzzle.")
flag.StringVar(&flags.Row4, "row4", "000000000", "4th row of the sudoku puzzle.")
flag.StringVar(&flags.Row5, "row5", "000000000", "5th row of the sudoku puzzle.")
flag.StringVar(&flags.Row6, "row6", "000000000", "6th row of the sudoku puzzle.")
flag.StringVar(&flags.Row7, "row7", "000000000", "7th row of the sudoku puzzle.")
flag.StringVar(&flags.Row8, "row8", "000000000", "8th row of the sudoku puzzle.")
flag.StringVar(&flags.Row9, "row9", "000000000", "9th row of the sudoku puzzle.")
flag.IntVar(&flags.NumCPUs, "numcpu", runtime.NumCPU(), "Number of CPU cores to assign to this task.")
flag.IntVar(&flags.Split, "split", 1, "Split the tasks in n parts. This depends on the availability of the first row.")
flag.IntVar(&flags.Part, "part", 1, "Process part x in n parts. Cannot be lower than 1, or higher than specified in split.")
flag.StringVar(&flags.Controller.Row1, "row1", "000000000", "1st row of the sudoku puzzle.")
flag.StringVar(&flags.Controller.Row2, "row2", "000000000", "2nd row of the sudoku puzzle.")
flag.StringVar(&flags.Controller.Row3, "row3", "000000000", "4rd row of the sudoku puzzle.")
flag.StringVar(&flags.Controller.Row4, "row4", "000000000", "4th row of the sudoku puzzle.")
flag.StringVar(&flags.Controller.Row5, "row5", "000000000", "5th row of the sudoku puzzle.")
flag.StringVar(&flags.Controller.Row6, "row6", "000000000", "6th row of the sudoku puzzle.")
flag.StringVar(&flags.Controller.Row7, "row7", "000000000", "7th row of the sudoku puzzle.")
flag.StringVar(&flags.Controller.Row8, "row8", "000000000", "8th row of the sudoku puzzle.")
flag.StringVar(&flags.Controller.Row9, "row9", "000000000", "9th row of the sudoku puzzle.")
flag.IntVar(&flags.Controller.NumCPUs, "numcpu", runtime.NumCPU(), "Number of CPU cores to assign to this task.")
flag.IntVar(&flags.Controller.Split, "split", 1, "Split the tasks in n parts. This depends on the availability of the first row.")
flag.IntVar(&flags.Controller.Part, "part", 1, "Process part x in n parts. Cannot be lower than 1, or higher than specified in split.")
// Parse the flags
flag.Parse()
// Process any changes to the CPU usage.
if flags.NumCPUs <= 0 {
if flags.Controller.NumCPUs <= 0 {
log.Printf("ERROR: Number of CPU cores must be 1 or higher.\n\n")
flags.printUsage()
os.Exit(1)
}
if flags.NumCPUs != runtime.NumCPU() {
runtime.GOMAXPROCS(flags.NumCPUs)
if flags.Controller.NumCPUs != runtime.NumCPU() {
runtime.GOMAXPROCS(flags.Controller.NumCPUs)
}
// Process rows
if flags.Row1 == "000000000" || flags.Row2 == "000000000" || flags.Row3 == "000000000" || flags.Row4 == "000000000" || flags.Row5 == "000000000" || flags.Row6 == "000000000" || flags.Row7 == "000000000" || flags.Row8 == "000000000" || flags.Row9 == "000000000" {
if flags.Controller.Row1 == "000000000" || flags.Controller.Row2 == "000000000" || flags.Controller.Row3 == "000000000" || flags.Controller.Row4 == "000000000" || flags.Controller.Row5 == "000000000" || flags.Controller.Row6 == "000000000" || flags.Controller.Row7 == "000000000" || flags.Controller.Row8 == "000000000" || flags.Controller.Row9 == "000000000" {
log.Printf("ERROR: All parameters must be entered.\n\n")
flags.printUsage()
os.Exit(1)
}
// Validate the row (never trust user input)
flags.validateRow("row1", flags.Row1)
flags.validateRow("row2", flags.Row2)
flags.validateRow("row3", flags.Row3)
flags.validateRow("row4", flags.Row4)
flags.validateRow("row5", flags.Row5)
flags.validateRow("row6", flags.Row6)
flags.validateRow("row7", flags.Row7)
flags.validateRow("row8", flags.Row8)
flags.validateRow("row9", flags.Row9)
flags.validateRow("row1", flags.Controller.Row1)
flags.validateRow("row2", flags.Controller.Row2)
flags.validateRow("row3", flags.Controller.Row3)
flags.validateRow("row4", flags.Controller.Row4)
flags.validateRow("row5", flags.Controller.Row5)
flags.validateRow("row6", flags.Controller.Row6)
flags.validateRow("row7", flags.Controller.Row7)
flags.validateRow("row8", flags.Controller.Row8)
flags.validateRow("row9", flags.Controller.Row9)
// Process workload splitting
// Ensure split and part are 1 or higher
if flags.Split <= 0 || flags.Part <= 0 {
if flags.Controller.Split <= 0 || flags.Controller.Part <= 0 {
log.Printf("ERROR: '-split' and '-part' need to be 1 or higher.\n")
flags.printUsage()
os.Exit(1)
}
// Ensure part is between 1 and split
if flags.Part > flags.Split {
if flags.Controller.Part > flags.Controller.Split {
log.Printf("ERROR: '-part' cannot be bigger than `-split`.\n")
flags.printUsage()
os.Exit(1)

View File

@ -1,19 +0,0 @@
package flags
import "gitea.ligthert.net/golang/sudoku-funpark/solver"
func (flags *Flags) TransferConfig(solver *solver.Solver) {
// Parse variables parsed from the flags to solver
solver.NumCPUs = flags.NumCPUs
solver.Split = flags.Split
solver.Part = flags.Part
solver.Row1 = flags.Row1
solver.Row2 = flags.Row2
solver.Row3 = flags.Row3
solver.Row4 = flags.Row4
solver.Row5 = flags.Row5
solver.Row6 = flags.Row6
solver.Row7 = flags.Row7
solver.Row8 = flags.Row8
solver.Row9 = flags.Row9
}

View File

@ -1,16 +1,7 @@
package flags
import "gitea.ligthert.net/golang/sudoku-funpark/controller"
type Flags struct {
Row1 string
Row2 string
Row3 string
Row4 string
Row5 string
Row6 string
Row7 string
Row8 string
Row9 string
NumCPUs int
Split int
Part int
Controller *controller.Controller
}