func()

in vermeer/apps/structure/graph_meta.go [748:850]


func (vp *VertexProperties) load(wg *sync.WaitGroup, meta GraphMeta, dir string) {

	defer wg.Done()
	tt := time.Now()
	vertexProperty := make(map[string]*VValues)
	ww := sync.WaitGroup{}
	rwLock := sync.RWMutex{}

	for k, v := range meta.VertexProperty {
		ww.Add(1)
		go func(wg *sync.WaitGroup, kk string, vv serialize.PartsMeta) {
			defer wg.Done()
			vValues := new(VValues)
			vValues.VType = ValueType(vv.ValueType)
			switch vValues.VType {
			case ValueTypeInt32:
				{
					partsNum := vv.PartNum
					p := make([]serialize.SliceInt32, partsNum)
					w := sync.WaitGroup{}
					for i := 0; i < partsNum; i++ {
						fileName := path.Join(dir, vv.FilePrefix) + strconv.Itoa(i)
						w.Add(1)
						go DeserializeFromFile(&p[i], fileName, &w)
					}
					w.Wait()

					length := 0
					for _, s := range p {
						length += len(s)
					}
					values := make([]serialize.SInt32, length)
					offset := 0
					for _, s := range p {
						n := copy(values[offset:], s)
						offset += n
					}

					vValues.Values = values

				}
			case ValueTypeFloat32:
				{
					partsNum := vv.PartNum
					p := make([]serialize.SliceFloat32, partsNum)
					w := sync.WaitGroup{}
					for i := 0; i < partsNum; i++ {
						fileName := path.Join(dir, vv.FilePrefix) + strconv.Itoa(i)
						w.Add(1)
						go DeserializeFromFile(&p[i], fileName, &w)
					}
					w.Wait()

					length := 0
					for _, s := range p {
						length += len(s)
					}
					values := make([]serialize.SFloat32, length)
					offset := 0
					for _, s := range p {
						n := copy(values[offset:], s)
						offset += n
					}

					vValues.Values = values

				}
			case ValueTypeString:
				{
					partsNum := vv.PartNum
					p := make([]serialize.SliceString, partsNum)
					w := sync.WaitGroup{}
					for i := 0; i < partsNum; i++ {
						fileName := path.Join(dir, vv.FilePrefix) + strconv.Itoa(i)
						w.Add(1)
						go DeserializeFromFile(&p[i], fileName, &w)
					}
					w.Wait()

					length := 0
					for _, s := range p {
						length += len(s)
					}
					values := make([]serialize.SString, length)
					offset := 0
					for _, s := range p {
						n := copy(values[offset:], s)
						offset += n
					}
					vValues.Values = values
				}
			}
			rwLock.Lock()
			vertexProperty[kk] = vValues
			rwLock.Unlock()
		}(&ww, k, v)

	}
	ww.Wait()
	*vp = vertexProperty
	logrus.Debugf("Deserialize VertexProperty cost=%v", time.Since(tt))

}