mirror of https://bitbucket.org/ausocean/av.git
Merged in meta-from-map (pull request #380)
Meta from map Approved-by: Saxon Milton <saxon.milton@gmail.com>
This commit is contained in:
commit
a78dd9e4b2
|
@ -90,6 +90,17 @@ func NewWith(data [][2]string) *Data {
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewFromMap creates a meta.Data from a map.
|
||||||
|
func NewFromMap(data map[string]string) *Data {
|
||||||
|
m := New()
|
||||||
|
m.order = make([]string, 0, len(data))
|
||||||
|
for k, v := range data {
|
||||||
|
m.data[k] = v
|
||||||
|
m.order = append(m.order, k)
|
||||||
|
}
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
// Add adds metadata with key and val.
|
// Add adds metadata with key and val.
|
||||||
func (m *Data) Add(key, val string) {
|
func (m *Data) Add(key, val string) {
|
||||||
m.mu.Lock()
|
m.mu.Lock()
|
||||||
|
@ -167,6 +178,23 @@ func (m *Data) Encode() []byte {
|
||||||
return m.enc
|
return m.enc
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// EncodeAsString takes the meta data map and encodes into a string with the data in
|
||||||
|
// TSV format. Unlike encode, the header with version and length of data is not
|
||||||
|
// included. This method is used for storing metadata in the store on vidgrind.
|
||||||
|
func (m *Data) EncodeAsString() string {
|
||||||
|
// Iterate over map and append entries, only adding tab if we're not on the
|
||||||
|
// last entry.
|
||||||
|
var str string
|
||||||
|
for i, k := range m.order {
|
||||||
|
v := m.data[k]
|
||||||
|
str += k + "=" + v
|
||||||
|
if i+1 < len(m.data) {
|
||||||
|
str += "\t"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return str
|
||||||
|
}
|
||||||
|
|
||||||
// Keys returns all keys in a slice of metadata d.
|
// Keys returns all keys in a slice of metadata d.
|
||||||
func Keys(d []byte) ([]string, error) {
|
func Keys(d []byte) ([]string, error) {
|
||||||
m, err := GetAll(d)
|
m, err := GetAll(d)
|
||||||
|
@ -227,9 +255,15 @@ func GetAllAsMap(d []byte) (map[string]string, error) {
|
||||||
// Skip the header, which is our data length and version.
|
// Skip the header, which is our data length and version.
|
||||||
d = d[headSize:]
|
d = d[headSize:]
|
||||||
|
|
||||||
|
return GetAllFromString(string(d))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetAllFromString returns a map containing keys and values from a string s containing
|
||||||
|
// metadata.
|
||||||
|
func GetAllFromString(s string) (map[string]string, error) {
|
||||||
// Each metadata entry (key and value) is seperated by a tab, so split at tabs
|
// Each metadata entry (key and value) is seperated by a tab, so split at tabs
|
||||||
// to get individual entries.
|
// to get individual entries.
|
||||||
entries := strings.Split(string(d), "\t")
|
entries := strings.Split(s, "\t")
|
||||||
|
|
||||||
// Go through entries and add to all map.
|
// Go through entries and add to all map.
|
||||||
all := make(map[string]string)
|
all := make(map[string]string)
|
||||||
|
|
Loading…
Reference in New Issue