package util import( "github.com/pierrec/lz4" "github.com/long/taskpubsub/logger" ) // 1. oldstring element is not in new : abandon(delete) // 2. new element is not in oldstring : add(add) func Difference(oldstring []string, newstring []string) map[string]string { var diff = make(map[string]string) // Loop two times, first to find oldstring strings not in newstring, // second loop to find newstring strings not in oldstring for i := 0; i < 2; i++ { for _, s1 := range oldstring { found := false for _, s2 := range newstring { if s1 == s2 { found = true break } } // String not found. We add it to return slice if !found && i == 0 { diff[s1] = "delete" } if !found && i != 0 { diff[s1] = "add" } } // Swap the slices, only if it was the first loop if i == 0 { oldstring, newstring = newstring, oldstring } } return diff } // UnCompress uncompress func UnCompress(in []byte) ([]byte, error) { out := make([]byte, 10*len(in)) n, err := lz4.UncompressBlock(in, out) if err != nil { logger.Error("uncompress error: ", err) return nil, err } out = out[:n] // uncompressed data return out, nil } // Compress compress func Compress(in []byte) ([]byte, error) { out := make([]byte, len(in)) ht := make([]int, 64<<10) // buffer for the compression table n, err := lz4.CompressBlock(in, out, ht) if err != nil { logger.Error("compress: ", err) return nil, err } if n >= len(in) { logger.Error("image is not compressible") } out = out[:n] // compressed data return out, nil }