| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package datastore | 5 package datastore |
| 6 | 6 |
| 7 import ( | 7 import ( |
| 8 "errors" | 8 "errors" |
| 9 "fmt" | 9 "fmt" |
| 10 "math" | 10 "math" |
| (...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 407 } | 407 } |
| 408 | 408 |
| 409 // Save implements PropertyLoadSaver.Save by returning a copy of the | 409 // Save implements PropertyLoadSaver.Save by returning a copy of the |
| 410 // current map data. | 410 // current map data. |
| 411 func (pm PropertyMap) Save(withMeta bool) (PropertyMap, error) { | 411 func (pm PropertyMap) Save(withMeta bool) (PropertyMap, error) { |
| 412 if len(pm) == 0 { | 412 if len(pm) == 0 { |
| 413 return PropertyMap{}, nil | 413 return PropertyMap{}, nil |
| 414 } | 414 } |
| 415 ret := make(PropertyMap, len(pm)) | 415 ret := make(PropertyMap, len(pm)) |
| 416 for k, v := range pm { | 416 for k, v := range pm { |
| 417 » » if withMeta || len(k) == 0 || k[0] != '$' { | 417 » » if withMeta || !isMetaKey(k) { |
| 418 ret[k] = append(ret[k], v...) | 418 ret[k] = append(ret[k], v...) |
| 419 } | 419 } |
| 420 } | 420 } |
| 421 return ret, nil | 421 return ret, nil |
| 422 } | 422 } |
| 423 | 423 |
| 424 // GetMeta implements PropertyLoadSaver.GetMeta, and returns the current value | 424 // GetMeta implements PropertyLoadSaver.GetMeta, and returns the current value |
| 425 // associated with the metadata key. It may return ErrMetaFieldUnset if the | 425 // associated with the metadata key. It may return ErrMetaFieldUnset if the |
| 426 // key doesn't exist. | 426 // key doesn't exist. |
| 427 func (pm PropertyMap) GetMeta(key string) (interface{}, error) { | 427 func (pm PropertyMap) GetMeta(key string) (interface{}, error) { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 443 return err | 443 return err |
| 444 } | 444 } |
| 445 pm["$"+key] = []Property{prop} | 445 pm["$"+key] = []Property{prop} |
| 446 return nil | 446 return nil |
| 447 } | 447 } |
| 448 | 448 |
| 449 // Problem implements PropertyLoadSaver.Problem. It ALWAYS returns nil. | 449 // Problem implements PropertyLoadSaver.Problem. It ALWAYS returns nil. |
| 450 func (pm PropertyMap) Problem() error { | 450 func (pm PropertyMap) Problem() error { |
| 451 return nil | 451 return nil |
| 452 } | 452 } |
| 453 |
| 454 // DataLen returns the number of non-metadata rows in this PropertyMap. |
| 455 func (pm PropertyMap) DataLen() int { |
| 456 ret := 0 |
| 457 for k := range pm { |
| 458 if isMetaKey(k) { |
| 459 continue |
| 460 } |
| 461 ret++ |
| 462 } |
| 463 return ret |
| 464 } |
| 465 |
| 466 func isMetaKey(k string) bool { |
| 467 // empty counts as a metakey since it's not a valid data key, but it's |
| 468 // not really a valid metakey either. |
| 469 return k == "" || k[0] == '$' |
| 470 } |
| OLD | NEW |