package pflag

import (
	
	
	
	
)

// -- stringToInt64 Value
type stringToInt64Value struct {
	value   *map[string]int64
	changed bool
}

func newStringToInt64Value( map[string]int64,  *map[string]int64) *stringToInt64Value {
	 := new(stringToInt64Value)
	.value = 
	*.value = 
	return 
}

// Format: a=1,b=2
func ( *stringToInt64Value) ( string) error {
	 := strings.Split(, ",")
	 := make(map[string]int64, len())
	for ,  := range  {
		 := strings.SplitN(, "=", 2)
		if len() != 2 {
			return fmt.Errorf("%s must be formatted as key=value", )
		}
		var  error
		[[0]],  = strconv.ParseInt([1], 10, 64)
		if  != nil {
			return 
		}
	}
	if !.changed {
		*.value = 
	} else {
		for ,  := range  {
			(*.value)[] = 
		}
	}
	.changed = true
	return nil
}

func ( *stringToInt64Value) () string {
	return "stringToInt64"
}

func ( *stringToInt64Value) () string {
	var  bytes.Buffer
	 := 0
	for ,  := range *.value {
		if  > 0 {
			.WriteRune(',')
		}
		.WriteString()
		.WriteRune('=')
		.WriteString(strconv.FormatInt(, 10))
		++
	}
	return "[" + .String() + "]"
}

func stringToInt64Conv( string) (interface{}, error) {
	 = strings.Trim(, "[]")
	// An empty string would cause an empty map
	if len() == 0 {
		return map[string]int64{}, nil
	}
	 := strings.Split(, ",")
	 := make(map[string]int64, len())
	for ,  := range  {
		 := strings.SplitN(, "=", 2)
		if len() != 2 {
			return nil, fmt.Errorf("%s must be formatted as key=value", )
		}
		var  error
		[[0]],  = strconv.ParseInt([1], 10, 64)
		if  != nil {
			return nil, 
		}
	}
	return , nil
}

// GetStringToInt64 return the map[string]int64 value of a flag with the given name
func ( *FlagSet) ( string) (map[string]int64, error) {
	,  := .getFlagType(, "stringToInt64", stringToInt64Conv)
	if  != nil {
		return map[string]int64{}, 
	}
	return .(map[string]int64), nil
}

// StringToInt64Var defines a string flag with specified name, default value, and usage string.
// The argument p point64s to a map[string]int64 variable in which to store the values of the multiple flags.
// The value of each argument will not try to be separated by comma
func ( *FlagSet) ( *map[string]int64,  string,  map[string]int64,  string) {
	.VarP(newStringToInt64Value(, ), , "", )
}

// StringToInt64VarP is like StringToInt64Var, but accepts a shorthand letter that can be used after a single dash.
func ( *FlagSet) ( *map[string]int64, ,  string,  map[string]int64,  string) {
	.VarP(newStringToInt64Value(, ), , , )
}

// StringToInt64Var defines a string flag with specified name, default value, and usage string.
// The argument p point64s to a map[string]int64 variable in which to store the value of the flag.
// The value of each argument will not try to be separated by comma
func ( *map[string]int64,  string,  map[string]int64,  string) {
	CommandLine.VarP(newStringToInt64Value(, ), , "", )
}

// StringToInt64VarP is like StringToInt64Var, but accepts a shorthand letter that can be used after a single dash.
func ( *map[string]int64, ,  string,  map[string]int64,  string) {
	CommandLine.VarP(newStringToInt64Value(, ), , , )
}

// StringToInt64 defines a string flag with specified name, default value, and usage string.
// The return value is the address of a map[string]int64 variable that stores the value of the flag.
// The value of each argument will not try to be separated by comma
func ( *FlagSet) ( string,  map[string]int64,  string) *map[string]int64 {
	 := map[string]int64{}
	.StringToInt64VarP(&, , "", , )
	return &
}

// StringToInt64P is like StringToInt64, but accepts a shorthand letter that can be used after a single dash.
func ( *FlagSet) (,  string,  map[string]int64,  string) *map[string]int64 {
	 := map[string]int64{}
	.StringToInt64VarP(&, , , , )
	return &
}

// StringToInt64 defines a string flag with specified name, default value, and usage string.
// The return value is the address of a map[string]int64 variable that stores the value of the flag.
// The value of each argument will not try to be separated by comma
func ( string,  map[string]int64,  string) *map[string]int64 {
	return CommandLine.StringToInt64P(, "", , )
}

// StringToInt64P is like StringToInt64, but accepts a shorthand letter that can be used after a single dash.
func (,  string,  map[string]int64,  string) *map[string]int64 {
	return CommandLine.StringToInt64P(, , , )
}