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

Side by Side Diff: chrome/browser/sync/notifier/base/utils.h

Issue 1956001: Moved XMPP notifier library from chrome/browser/sync to chrome/common.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 7 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 //
5 // Utility functions.
6
7 #ifndef CHROME_BROWSER_SYNC_NOTIFIER_BASE_UTILS_H_
8 #define CHROME_BROWSER_SYNC_NOTIFIER_BASE_UTILS_H_
9
10 #include <map>
11 #include <string>
12
13 #include "chrome/browser/sync/notifier/base/static_assert.h"
14
15 // Return error if the first argument evaluates to false.
16 #define RET_IF_FALSE(x) do { if (!(x)) return false; } while (false)
17
18 // Protocol constants.
19 const char kHttpProto[] = "http://";
20 const char kHttpsProto[] = "https://";
21
22 // Initialize a POD to zero. Using this function requires discipline. Don't
23 // use for types that have a v-table or virtual bases.
24 template <typename T>
25 inline void SetZero(T& p) {
26 // Guard against the easy mistake of
27 // foo(int *p) { SetZero(p); } instead of
28 // SetZero(*p);
29 // which it should be.
30 STATIC_ASSERT(sizeof(T) != sizeof(void*));
31
32 // A POD (plain old data) object has one of these data types:
33 // a fundamental type, union, struct, array,
34 // or class--with no constructor. PODs don't have virtual functions or
35 // virtual bases.
36
37 // Test to see if the type has constructors.
38 union CtorTest {
39 T t;
40 int i;
41 };
42
43 // TODO(sync) There might be a way to test if the type has virtuals.
44 // For now, if we zero a type with virtuals by mistake, it is going to crash
45 // predictable at run-time when the virtuals are called.
46 memset(&p, 0, sizeof(T));
47 }
48
49 // Used to delete each element in a vector<T*>/deque<T*> (and then empty the
50 // sequence).
51 template <class T>
52 void CleanupSequence(T* items) {
53 for (typename T::iterator it(items->begin()); it != items->end(); ++it) {
54 delete (*it);
55 }
56 items->clear();
57 }
58
59 // Typically used to clean up values used in a hash_map that had Type* as
60 // values.
61 //
62 // WARNING: This function assumes that T::clear will not access the values
63 // (or the keys if they are the same as the values). This is true for
64 // hash_map.
65 template <class T>
66 void CleanupMap(T* items) {
67 // This is likely slower than a for loop, but we have to do it this way. In
68 // some of the maps we use, deleting it->second causes it->first to be
69 // deleted as well, and that seems to send the iterator in a tizzy.
70 typename T::iterator it = items->begin();
71 while (it != items->end()) {
72 items->erase(it->first);
73 delete it->second;
74 it = items->begin();
75 }
76 }
77
78 // Get the value of an element in the map with the specified name.
79 template <class T>
80 void GetMapElement(const std::map<const std::string, const T>& m,
81 const char* name,
82 T* value) {
83 typename std::map<const std::string, const T>::const_iterator iter(
84 m.find(name));
85 if (iter != m.end()) {
86 *value = iter->second;
87 }
88 }
89
90 #endif // CHROME_BROWSER_SYNC_NOTIFIER_BASE_UTILS_H_
OLDNEW
« no previous file with comments | « chrome/browser/sync/notifier/base/timer.cc ('k') | chrome/browser/sync/notifier/base/win/async_network_alive_win32.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698