Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- func DataManager(addData <-chan App, takeData chan<- App, askAdd <-chan int, askTake <-chan int) {
- var data [ARRAYSIZE]App
- count := 0
- maxValue := len(data)
- status := true
- for status == true { //kol nepasiektas paskutinis elementas
- var activeChannels = []<-chan int{nil}
- if count > 0 {
- activeChannels = append(activeChannels, askTake)
- } else {
- activeChannels = append(activeChannels, nil)
- }
- if count < maxValue && status == true {
- activeChannels = append(activeChannels, askAdd)
- } else {
- activeChannels = append(activeChannels, nil)
- }
- var cases []reflect.SelectCase
- for _, c := range activeChannels {
- cases = append(cases, reflect.SelectCase{
- Dir: reflect.SelectRecv,
- Chan: reflect.ValueOf(c),
- })
- }
- chooserIndex, _, _ := reflect.Select(cases)
- switch chooserIndex {
- case 1:
- if globalcounterremoved == elementcounter {
- status = false
- } else {
- user := data[count-1]
- takeData <- user
- count = count - 1
- globalcounterremoved++
- }
- case 2:
- var app App
- app = <-addData
- globalcounteradd++
- if globalcounterremoved == elementcounter {
- data[count] = app
- count = count + 1
- status = false
- } else {
- data[count] = app
- count = count + 1
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement