| | |
| | | |
| | | import ( |
| | | "sync" |
| | | "encoding/json" |
| | | "fmt" |
| | | //"encoding/json" |
| | | //"fmt" |
| | | ) |
| | | |
| | | var commonmux sync.Mutex |
| | |
| | | |
| | | var Count = make(chan int) |
| | | |
| | | type wfOp func(a, b string) float32 |
| | | type wfOp func(a []byte, b string) float32 |
| | | |
| | | /** |
| | | * @param uint8, shardCnt must be pow of two |
| | |
| | | } |
| | | |
| | | // modify by long. |
| | | func (s *ShardMap) Walk(wf wfOp, cfrom string) ([]byte){ |
| | | func (s *ShardMap) Walk(wf wfOp, cfrom []byte) ( map[string]float32 ){ |
| | | var wg sync.WaitGroup |
| | | var second float32 |
| | | var buf []byte |
| | | var err error |
| | | |
| | | ids := make(map[string]float32) |
| | | for _, si := range s.shards { |
| | |
| | | |
| | | wg.Add(1) |
| | | |
| | | go func(st *shardItem, fw wfOp, cf string) { |
| | | go func(st *shardItem, fw wfOp, cf []byte) { |
| | | defer wg.Done() |
| | | commonmux.Lock() |
| | | for id, feature := range st.data { |
| | |
| | | |
| | | wg.Wait() |
| | | |
| | | buf, err = json.Marshal(ids) |
| | | if err != nil { |
| | | fmt.Println("compare json err") |
| | | buf = nil |
| | | |
| | | } |
| | | return buf |
| | | return ids |
| | | |
| | | } |
| | | |
| | | // print all |