github.com/swiftstack/proxyfs@v0.0.0-20201223034610-5434d919416e/pfsagentConfig/dataStructures.go (about)

     1  package pfsagentConfig
     2  
     3  import "fmt"
     4  
     5  type stringStack struct {
     6  	items []string
     7  }
     8  
     9  type stringArrayStack struct {
    10  	items [][]string
    11  }
    12  
    13  type stringMapStack struct {
    14  	items []map[string]string
    15  }
    16  
    17  func (s stringStack) push(val string) (err error) {
    18  	if len(val) == 0 {
    19  		err = fmt.Errorf("value cannot be zero-length")
    20  	} else {
    21  		s.items = append(s.items, val)
    22  	}
    23  	return
    24  }
    25  
    26  func (s stringStack) pop() (val string) {
    27  	if len(s.items) == 0 {
    28  		return
    29  	}
    30  	val = s.peek()
    31  	s.items = s.items[:len(s.items)-2]
    32  
    33  	return
    34  }
    35  
    36  func (s stringStack) peek() (val string) {
    37  	val = s.items[len(s.items)-1]
    38  	return
    39  }
    40  
    41  func (s stringArrayStack) push(val []string) (err error) {
    42  	if len(val) == 0 {
    43  		err = fmt.Errorf("value cannot be zero-length")
    44  	} else {
    45  		s.items = append(s.items, val)
    46  	}
    47  	return
    48  }
    49  
    50  func (s stringArrayStack) pop() (val []string) {
    51  	if len(s.items) == 0 {
    52  		return
    53  	}
    54  	val = s.peek()
    55  	s.items = s.items[:len(s.items)-2]
    56  
    57  	return
    58  }
    59  
    60  func (s stringArrayStack) peek() (val []string) {
    61  	val = s.items[len(s.items)-1]
    62  	return
    63  }
    64  
    65  func (s stringMapStack) push(val map[string]string) (err error) {
    66  	if len(val) == 0 {
    67  		err = fmt.Errorf("value cannot be zero-length")
    68  	} else {
    69  		s.items = append(s.items, val)
    70  	}
    71  	return
    72  }
    73  
    74  func (s stringMapStack) pop() (val map[string]string) {
    75  	if len(s.items) == 0 {
    76  		return
    77  	}
    78  	val = s.peek()
    79  	s.items = s.items[:len(s.items)-2]
    80  
    81  	return
    82  }
    83  
    84  func (s stringMapStack) peek() (val map[string]string) {
    85  	val = s.items[len(s.items)-1]
    86  	return
    87  }