added i32 and i64 support
This commit is contained in:
@@ -37,6 +37,8 @@ FLAG_SEP_CHAR := "="
|
||||
Flag_Value_Ptr :: union {
|
||||
^bool,
|
||||
^int,
|
||||
^i32,
|
||||
^i64,
|
||||
^string,
|
||||
^f32,
|
||||
^f64,
|
||||
@@ -99,6 +101,10 @@ print_usage :: proc() {
|
||||
fmt.printfln("\t%s%s:\n\t\t%s (default: %v)%s\n", FLAG_START_CHAR, f.name, f.usage, v^, req_msg)
|
||||
case ^int:
|
||||
fmt.printfln("\t%s%s:\n\t\t%s (default: %d)%s\n", FLAG_START_CHAR, f.name, f.usage, v^, req_msg)
|
||||
case ^i32:
|
||||
fmt.printfln("\t%s%s:\n\t\t%s (default: %d)%s\n", FLAG_START_CHAR, f.name, f.usage, v^, req_msg)
|
||||
case ^i64:
|
||||
fmt.printfln("\t%s%s:\n\t\t%s (default: %d)%s\n", FLAG_START_CHAR, f.name, f.usage, v^, req_msg)
|
||||
case ^string:
|
||||
fmt.printfln("\t%s%s:\n\t\t%s (default: %s)%s\n", FLAG_START_CHAR, f.name, f.usage, v^, req_msg)
|
||||
case ^f32:
|
||||
@@ -127,6 +133,24 @@ IntVar :: proc(ptr: ^int, name: string, default: int, usage: string, required :=
|
||||
append(&all_flags, Flag{name = name, value = ptr, usage = usage, required = required})
|
||||
}
|
||||
|
||||
Int32Var :: proc(ptr: ^i32, name: string, default: i32, usage: string, required := false) {
|
||||
if ptr == nil {
|
||||
fmt.fprintfln(os.stderr, "[ERROR]: Invalid usage of Int32Var: got nil for 'ptr' value!")
|
||||
os.exit(1)
|
||||
}
|
||||
ptr^ = default
|
||||
append(&all_flags, Flag{name = name, value = ptr, usage = usage, required = required})
|
||||
}
|
||||
|
||||
Int64Var :: proc(ptr: ^i64, name: string, default: i64, usage: string, required := false) {
|
||||
if ptr == nil {
|
||||
fmt.fprintfln(os.stderr, "[ERROR]: Invalid usage of Int32Var: got nil for 'ptr' value!")
|
||||
os.exit(1)
|
||||
}
|
||||
ptr^ = default
|
||||
append(&all_flags, Flag{name = name, value = ptr, usage = usage, required = required})
|
||||
}
|
||||
|
||||
StringVar :: proc(ptr: ^string, name: string, default: string, usage: string, required := false) {
|
||||
if ptr == nil {
|
||||
fmt.fprintfln(os.stderr, "[ERROR]: Invalid usage of StringVar: got nil for 'ptr' value!")
|
||||
@@ -214,6 +238,26 @@ parse_flags :: proc() {
|
||||
}
|
||||
v^ = parsed
|
||||
|
||||
case ^i32:
|
||||
if value == "" {break}
|
||||
parsed, ok := strconv.parse_int(value)
|
||||
if !ok {
|
||||
fmt.fprintfln(os.stderr, "[ERROR] Failed to parse flag %s: got %T, wanted int",
|
||||
f.name, value)
|
||||
os.exit(1)
|
||||
}
|
||||
v^ = cast(i32)parsed
|
||||
|
||||
case ^i64:
|
||||
if value == "" {break}
|
||||
parsed, ok := strconv.parse_i64(value)
|
||||
if !ok {
|
||||
fmt.fprintfln(os.stderr, "[ERROR] Failed to parse flag %s: got %T, wanted int",
|
||||
f.name, value)
|
||||
os.exit(1)
|
||||
}
|
||||
v^ = parsed
|
||||
|
||||
case ^string:
|
||||
if value == "" {break}
|
||||
// TODO: validate string?
|
||||
|
||||
Reference in New Issue
Block a user