diff options
| -rw-r--r-- | cmd/linked_token_slice.go | 28 | ||||
| -rw-r--r-- | cmd/token.go | 30 | ||||
| -rw-r--r-- | cmd/uptfs.go | 27 |
3 files changed, 70 insertions, 15 deletions
diff --git a/cmd/linked_token_slice.go b/cmd/linked_token_slice.go new file mode 100644 index 0000000..c8c876f --- /dev/null +++ b/cmd/linked_token_slice.go @@ -0,0 +1,28 @@ +package cmd + +type LinkedTokenList struct { + head, tail *Token +} + +func (lts *LinkedTokenList) AddToken(content string) { + newToken := &Token{ + content: content, + prev: nil, + next: nil, + } + + if lts.head == nil { + lts.head = newToken + lts.tail = newToken + } else { + newToken.SetPreviousToken(lts.tail) + lts.tail.SetNextToken(newToken) + lts.tail = newToken + } +} + +func SliceToLinkedTokenSlice(slice []string, tokenSlice *LinkedTokenList) { + for _, item := range slice { + tokenSlice.AddToken(item) + } +} diff --git a/cmd/token.go b/cmd/token.go new file mode 100644 index 0000000..7652be7 --- /dev/null +++ b/cmd/token.go @@ -0,0 +1,30 @@ +package cmd + +type Token struct { + content string + prev, next *Token +} + +func (t *Token) GetContent() string { + return t.content +} + +func (t *Token) SetContent(content string) { + t.content = content +} + +func (t *Token) GetPreviousToken() *Token { + return t.prev +} + +func (t *Token) SetPreviousToken(newToken *Token) { + t.prev = newToken +} + +func (t *Token) GetNextToken() *Token { + return t.next +} + +func (t *Token) SetNextToken(newToken *Token) { + t.next = newToken +} diff --git a/cmd/uptfs.go b/cmd/uptfs.go index 1bba4c4..531b102 100644 --- a/cmd/uptfs.go +++ b/cmd/uptfs.go @@ -24,28 +24,25 @@ func Run() { tokens := strings.Split(inputString, " ") tokens = formatInput(tokens, additionalDelimeters) - lowercaseFilter := NewLowercaseFilterWithExtraSteps() - lowercaseFilter.Greet() - - var newTokens []string - for _, token := range tokens { - newTokens = append(newTokens, lowercaseFilter.Filter(token)) + if len(tokens) == 0 { + err := errors.New("the slice is empty") + fmt.Printf("%v\n", err) + os.Exit(1) } - tokens = newTokens + var linkedTokens LinkedTokenList + SliceToLinkedTokenSlice(tokens, &linkedTokens) + lowercaseFilter := NewLowercaseFilterWithExtraSteps() uppercaseFilter := NewUppercaseFilter() - uppercaseFilter.Greet() - newTokens = nil - for _, token := range tokens { - newTokens = append(newTokens, uppercaseFilter.Filter(token)) + for current := linkedTokens.head; current != nil; current = current.GetNextToken() { + current.content = lowercaseFilter.Filter(current.content) + current.content = uppercaseFilter.Filter(current.content) } - result := strings.Join(newTokens, " ") - - fmt.Println("") - fmt.Println(result) + fmt.Println("Head: ", linkedTokens.head.content) + fmt.Println("Tail: ", linkedTokens.tail.content) } func formatInput(tokenArray []string, delimeterArray []string) []string { |
