package bcap import ( "strings" "sync" ) func fnvHash(key string) uint32 { hash := uint32(2166136261) for i := 0; i < len(key); i++ { hash ^= uint32(key[i]) hash *= 16777619 } return hash } var stringBuilderPool = sync.Pool{ New: func() interface{} { return &strings.Builder{} }, } func getStringBuilder() *strings.Builder { return stringBuilderPool.Get().(*strings.Builder) } func putStringBuilder(sb *strings.Builder) { sb.Reset() stringBuilderPool.Put(sb) } func buildKey(protocol, srcIP, srcPort, dstIP, dstPort string) string { sb := getStringBuilder() defer putStringBuilder(sb) sb.WriteString(protocol) sb.WriteString("://") sb.WriteString(srcIP) if srcPort != "" { sb.WriteString(":") sb.WriteString(srcPort) } sb.WriteString("=") sb.WriteString(dstIP) if dstPort != "" { sb.WriteString(":") sb.WriteString(dstPort) } return sb.String() }