github.com/sixexorg/magnetic-ring@v0.0.0-20191119090307-31705a21e419/node/stars.go (about)

     1  package node
     2  
     3  import (
     4  	"sort"
     5  	"sync"
     6  )
     7  
     8  type starsMgr struct {
     9  	stars []string
    10  	earth string
    11  	m     sync.RWMutex
    12  }
    13  
    14  func NewStarsMgr() *starsMgr {
    15  	return &starsMgr{}
    16  }
    17  
    18  func (s *starsMgr) curStars() []string {
    19  	s.m.RLock()
    20  	defer s.m.RUnlock()
    21  	return s.stars
    22  	/*return []string{
    23  		"04dc2c38fd4985a30f31fe9ab0e1d6ffa85d33d5c8f0a5ff38c45534e8f4ffe751055e6f1bbec984839dd772a68794722683ed12994feb84a13b8086162591418f",
    24  		"044a147deabaa89e15aab6f586ce8c9b68bf11043ca83387b125d82489252d94e858f7b43a43000d7a949ff1bd8742fcad57434d08b2455bfc5f681dd0cf0a32f6",
    25  		"0405269acdc54c24220f67911a3ac709b129ff2454717875b789288954bb2e6afaed4d59ff0f4c4d14afff9f6f4e1ffb71a1e5457fa2ca7440a020218559ab7f3f",
    26  
    27  		//"045d54e7cebc80e03c52e53a9a3b7601041183514230ae5776996a131942f8f25425144adc67bbe266200fc7357781a9cc579b3814b37b4f46b3de67cf12177da8",
    28  		//"04a3a9d49d883984c61e3f902f73c4fd0b4067bef3199b3f248a1973d02879e09a89b1b869ea03d40c1816a01fcc2d0a95288c98cfd4386883d9df3015e3f2d72d",
    29  	}*/
    30  }
    31  func (s *starsMgr) pushStars(pubStrs []string) {
    32  	s.m.Lock()
    33  	defer s.m.Unlock()
    34  	for _, v := range pubStrs {
    35  		isFound := false
    36  		for _, vi := range s.stars {
    37  			if vi == v {
    38  				isFound = true
    39  				break
    40  			}
    41  		}
    42  		if isFound{
    43  			continue
    44  		}
    45  		s.stars = append(s.stars, v)
    46  	}
    47  }
    48  func (s *starsMgr) popStars(pubStrs []string) {
    49  	s.m.Lock()
    50  	defer s.m.Unlock()
    51  	//linq.From(s.stars).Except(linq.From(pubStrs)).ToSlice(&s.stars)
    52  	idx := make([]int, 0, len(pubStrs))
    53  	for _, v := range pubStrs {
    54  		for k, vi := range s.stars {
    55  			if vi == v {
    56  				idx = append(idx, k)
    57  				break
    58  			}
    59  		}
    60  	}
    61  	sort.Ints(idx)
    62  	l := len(idx)
    63  	dynamic := len(s.stars) - 1
    64  	for i := 0; i < l; i++ {
    65  		tmp := idx[i] - i
    66  		if tmp == 0 {
    67  			s.stars = s.stars[1:]
    68  		} else if tmp == dynamic {
    69  			s.stars = s.stars[:tmp]
    70  		} else {
    71  			s.stars = append(s.stars[0:idx[i]-1], s.stars[idx[i]:]...)
    72  		}
    73  		dynamic--
    74  	}
    75  }
    76  
    77  var st *starsMgr = NewStarsMgr()