package util
|
|
import(
|
"github.com/pierrec/lz4"
|
"github.com/long/test/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
|
}
|