-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmemory_retention.go
150 lines (131 loc) · 2.53 KB
/
memory_retention.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
package memory_retention
import (
"fmt"
"sync"
)
var mutex = &sync.Mutex{}
// This global variable used save client answers.
// - Key is a hash value that identifies an individual.
var data = make(map[string][]string)
// Topics specified by the presenter.
var topics = make(map[string]string)
// Save whether the key is in use.
// If the key does not exist in this map, it is not used.
var keyMap = make(map[string]bool)
// Create a key.
//
// Arguments:
// hash {string} - hash value.
func CreateKey(hash string) {
mutex.Lock()
keyMap[hash] = true
mutex.Unlock()
}
// Deletes the specified key.
//
// Arguments:
// key {string} - Key value.
func DeleteKey(key string) error {
mutex.Lock()
if err := exist(key); err != nil {
return err
}
delete(keyMap, key)
delete(data, key)
delete(topics, key)
mutex.Unlock()
return nil
}
// Clear the answer.
//
// Arguments:
// key {string} - Key value.
func DeleteAnswer(key string) error {
mutex.Lock()
if err := exist(key); err != nil {
return err
}
data[key] = []string{}
mutex.Unlock()
return nil
}
// All clear.
func DeleteAll() {
data = make(map[string][]string)
keyMap = make(map[string]bool)
topics = make(map[string]string)
}
// Check if the key exists.
// If the key does not exist, an error will be thrown.
//
// Arguments:
// key {string} - Key value.
func exist(key string) error {
_, exist := keyMap[key]
if !exist {
return fmt.Errorf("Key is not exist.")
}
return nil
}
// Add an answer.
//
// Arguments:
// key {string} - Key value.
// value {string} - Answer.
func AddAnswer(key string, value string) error {
mutex.Lock()
if err := exist(key); err != nil {
return err
}
if data[key] == nil {
}
data[key] = append(data[key], value)
mutex.Unlock()
return nil
}
// Returns a list of answers.
//
// Arguments:
// key {string} - Key value.
//
// Returns:
// {[]string} - Answers.
func GetAnswer(key string) ([]string, error) {
mutex.Lock()
if err := exist(key); err != nil {
return nil, err
}
answer := data[key]
mutex.Unlock()
return answer, nil
}
// Set a topic.
//
// Arguments:
// key {string} - Key value.
// value {string} - topic
func SetTopic(key string, value string) error {
mutex.Lock()
if err := exist(key); err != nil {
return err
}
topics[key] = value
mutex.Unlock()
return nil
}
// Get topic
//
// Arguments:
// key {string} - key value.
//
// Returns:
// {string} - topic.
func GetTopic(key string) (string, error) {
mutex.Lock()
if err := exist(key); err != nil {
return "", err
}
topic := topics[key]
mutex.Unlock()
return topic, nil
}