Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4033)

Unified Diff: base/values.h

Issue 441008: Many changes to DictionaryValues:... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: base/values.h
===================================================================
--- base/values.h (revision 32858)
+++ base/values.h (working copy)
@@ -1,4 +1,4 @@
-// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
+// Copyright (c) 2009 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -207,8 +207,11 @@
bool HasKey(const std::wstring& key) const;
// Returns the number of Values in this dictionary.
- size_t GetSize() const { return dictionary_.size(); }
+ size_t size() const { return dictionary_.size(); }
+ // Returns whether the dictionary is empty.
+ bool empty() const { return dictionary_.empty(); }
+
// Clears any current contents of this dictionary.
void Clear();
@@ -220,17 +223,21 @@
// a DictionaryValue, a new DictionaryValue will be created and attached
// to the path in that location.
// Note that the dictionary takes ownership of the value referenced by
- // |in_value|.
- bool Set(const std::wstring& path, Value* in_value);
+ // |in_value|, and therefore |in_value| must be non-NULL.
+ void Set(const std::wstring& path, Value* in_value);
// Convenience forms of Set(). These methods will replace any existing
// value at that path, even if it has a different type.
- bool SetBoolean(const std::wstring& path, bool in_value);
- bool SetInteger(const std::wstring& path, int in_value);
- bool SetReal(const std::wstring& path, double in_value);
- bool SetString(const std::wstring& path, const std::string& in_value);
- bool SetString(const std::wstring& path, const std::wstring& in_value);
+ void SetBoolean(const std::wstring& path, bool in_value);
+ void SetInteger(const std::wstring& path, int in_value);
+ void SetReal(const std::wstring& path, double in_value);
+ void SetString(const std::wstring& path, const std::string& in_value);
+ void SetString(const std::wstring& path, const std::wstring& in_value);
+ // Like Set(), but without special treatment of '.'. This allows e.g. URLs to
+ // be used as paths.
+ void SetWithoutPathExpansion(const std::wstring& key, Value* in_value);
+
// Gets the Value associated with the given path starting from this object.
// A path has the form "<key>" or "<key>.<key>.[...]", where "." indexes
// into the next DictionaryValue down. If the path can be resolved
@@ -253,6 +260,21 @@
DictionaryValue** out_value) const;
bool GetList(const std::wstring& path, ListValue** out_value) const;
+ // Like Get(), but without special treatment of '.'. This allows e.g. URLs to
+ // be used as paths.
+ bool GetWithoutPathExpansion(const std::wstring& key,
+ Value** out_value) const;
+ bool GetIntegerWithoutPathExpansion(const std::wstring& path,
+ int* out_value) const;
+ bool GetStringWithoutPathExpansion(const std::wstring& path,
+ std::string* out_value) const;
+ bool GetStringWithoutPathExpansion(const std::wstring& path,
+ std::wstring* out_value) const;
+ bool GetDictionaryWithoutPathExpansion(const std::wstring& path,
+ DictionaryValue** out_value) const;
+ bool GetListWithoutPathExpansion(const std::wstring& path,
+ ListValue** out_value) const;
+
// Removes the Value with the specified path from this dictionary (or one
// of its child dictionaries, if the path is more than just a local key).
// If |out_value| is non-NULL, the removed Value AND ITS OWNERSHIP will be
@@ -261,8 +283,16 @@
// it will return false and the DictionaryValue object will be unchanged.
bool Remove(const std::wstring& path, Value** out_value);
+ // Like Remove(), but without special treatment of '.'. This allows e.g. URLs
+ // to be used as paths.
+ bool RemoveWithoutPathExpansion(const std::wstring& key, Value** out_value);
+
// This class provides an iterator for the keys in the dictionary.
// It can't be used to modify the dictionary.
+ //
+ // YOU SHOULD ALWAYS USE THE XXXWithoutPathExpansion() APIs WITH THESE, NOT
+ // THE NORMAL XXX() APIs. This makes sure things will work correctly if any
+ // keys have '.'s in them.
class key_iterator
: private std::iterator<std::input_iterator_tag, const std::wstring> {
public:
@@ -280,11 +310,6 @@
key_iterator end_keys() const { return key_iterator(dictionary_.end()); }
private:
- // Associates the value |in_value| with the |key|. This method should be
- // used instead of "dictionary_[key] = foo" so that any previous value can
- // be properly deleted.
- void SetInCurrentNode(const std::wstring& key, Value* in_value);
-
ValueMap dictionary_;
DISALLOW_COPY_AND_ASSIGN(DictionaryValue);
« no previous file with comments | « base/json/json_writer_unittest.cc ('k') | base/values.cc » ('j') | base/values.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698