Skip to content

Commit a11ba3b

Browse files
committed
Update docs
1 parent 17943a6 commit a11ba3b

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

README.md

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,14 @@ Thus I implemented fpGo. I hope you would like it :)
4444

4545
* Java8Stream-like Collection
4646

47+
* Queue (LinkedListQueue/ChannelQueue/BufferedChannelQueue/ConcurrentQueue)
48+
4749
* PythonicGenerator-like Coroutine(yield/yieldFrom)
4850

4951
* Akka/Erlang-like Actor model(send/receive/spawn/states)
5052

53+
* **network/SimpleHTTP** inspired by [Retrofit](https://github.com/square/retrofit)
54+
5155
# Special thanks
5256
* fp functions(Dedupe/Difference/Distinct/IsDistinct/DropEq/Drop/DropLast/DropWhile/IsEqual/IsEqualMap/Every/Exists/Intersection/Keys/Values/Max/Min/MinMax/Merge/IsNeg/IsPos/PMap/Range/Reverse/Set/Some/IsSubset/IsSuperset/Take/TakeLast/Union/IsZero/Zip/GroupBy/UniqBy/Flatten/Prepend/Partition/Tail/Head/SplitEvery)
5357
* Credit: https://github.com/logic-building/functional-go
@@ -168,6 +172,64 @@ for _, v := range s.ToArray() {
168172
fmt.Println(tempString) // tempString would be "1234"
169173
```
170174

175+
## Queue(LinkedListQueue/ChannelQueue/BufferedChannelQueue/ConcurrentQueue) (inspired by Collection libs)
176+
177+
### LinkedListQueue(Shift/Unshift/Push/Pop), ConcurrentQueue(inspired by Java)
178+
179+
Example:
180+
181+
```go
182+
var queue Queue[int]
183+
var stack Stack[int]
184+
var err error
185+
var result int
186+
187+
linkedListQueue := NewLinkedListQueue[int]()
188+
queue = linkedListQueue
189+
stack = linkedListQueue
190+
concurrentQueue := NewConcurrentQueue[int](queue)
191+
192+
// As a Queue, Put(val) in the TAIL and Take() in the HEAD
193+
err = queue.Offer(1)
194+
err = queue.Offer(2)
195+
err = queue.Offer(3)
196+
result, err = queue.Poll() // Result should be 1
197+
result, err = queue.Poll() // Result should be 2
198+
result, err = queue.Poll() // Result should be 3
199+
result, err = queue.Poll() // Err: ErrQueueIsEmpty
200+
201+
// As a Stack, Push(val) & Pop() in the TAIL.
202+
err = stack.Push(1)
203+
err = stack.Push(2)
204+
err = stack.Push(3)
205+
result, err = stack.Pop() // Result should be 3
206+
result, err = stack.Pop() // Result should be 2
207+
result, err = stack.Pop() // Result should be 1
208+
result, err = stack.Pop() // Err: ErrStackIsEmpty
209+
```
210+
211+
### BufferedChannelQueue(Offer/Take/TakeWithTimeout)
212+
213+
Example:
214+
215+
```go
216+
var err error
217+
var result int
218+
var timeout time.Duration
219+
220+
bufferedChannelQueue := NewBufferedChannelQueue[int](3, 10000, 100)
221+
bufferedChannelQueue.SetLoadFromPoolDuration(time.Millisecond / 10)
222+
bufferedChannelQueue.SetFreeNodeHookPoolIntervalDuration(1 * time.Millisecond)
223+
224+
err = queue.Offer(1)
225+
err = queue.Offer(2)
226+
err = queue.Offer(3)
227+
timeout = 1 * time.Millisecond
228+
result, err = bufferedChannelQueue.TakeWithTimeout(timeout) // Result should be 1
229+
result, err = bufferedChannelQueue.TakeWithTimeout(timeout) // Result should be 2
230+
result, err = bufferedChannelQueue.TakeWithTimeout(timeout) // Result should be 3
231+
```
232+
171233
## Actor (inspired by Akka/Erlang)
172234

173235
### Actor common(send/receive/spawn/states)

0 commit comments

Comments
 (0)