Index: chrome/browser/sync/util/fast_dump.h |
=================================================================== |
--- chrome/browser/sync/util/fast_dump.h (revision 0) |
+++ chrome/browser/sync/util/fast_dump.h (revision 0) |
@@ -0,0 +1,60 @@ |
+// 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. |
+ |
+#ifndef CHROME_BROWSER_SYNC_UTIL_FAST_DUMP_H_ |
+#define CHROME_BROWSER_SYNC_UTIL_FAST_DUMP_H_ |
+ |
+#include <ostream> |
+#include <streambuf> |
+#include <string> |
+ |
+#include "base/string_util.h" |
+ |
+using std::ostream; |
+using std::streambuf; |
+using std::string; |
+ |
+// This seems totally gratuitous, and it would be if std::ostream was fast, but |
+// std::ostream is slow. It's slow because it creates a ostream::sentry (mutex) |
+// for every little << operator. When you want to dump a whole lot of stuff |
+// under a single mutex lock, use this FastDump class. |
+namespace browser_sync { |
+class FastDump { |
+ public: |
+ explicit FastDump(ostream* outs) : sentry_(*outs), out_(outs->rdbuf()) { |
+ } |
+ ostream::sentry sentry_; |
+ streambuf* const out_; |
+}; |
+} // namespace browser_sync |
+ |
+inline browser_sync::FastDump& operator << |
+ (browser_sync::FastDump& dump, int64 n) { |
+ string numbuf(Int64ToString(n)); |
+ const char* number = numbuf.c_str(); |
+ dump.out_->sputn(number, numbuf.length()); |
+ return dump; |
+} |
+ |
+inline browser_sync::FastDump& operator << |
+ (browser_sync::FastDump& dump, int32 n) { |
+ string numbuf(IntToString(n)); |
+ const char* number = numbuf.c_str(); |
+ dump.out_->sputn(number, numbuf.length()); |
+ return dump; |
+} |
+ |
+inline browser_sync::FastDump& operator << |
+ (browser_sync::FastDump& dump, const char* s) { |
+ dump.out_->sputn(s, strlen(s)); |
+ return dump; |
+} |
+ |
+inline browser_sync::FastDump& operator << |
+ (browser_sync::FastDump& dump, const string& s) { |
+ dump.out_->sputn(s.data(), s.size()); |
+ return dump; |
+} |
+ |
+#endif // CHROME_BROWSER_SYNC_UTIL_FAST_DUMP_H_ |
Property changes on: chrome\browser\sync\util\fast_dump.h |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |