summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cmd/linked_token_slice.go28
-rw-r--r--cmd/token.go30
-rw-r--r--cmd/uptfs.go27
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 {