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

Unified Diff: chrome/browser/spellchecker/set_difference_container.h

Issue 1665023002: Cheer up spell-checking code (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/spellchecker/set_difference_container.h
diff --git a/chrome/browser/spellchecker/set_difference_container.h b/chrome/browser/spellchecker/set_difference_container.h
new file mode 100644
index 0000000000000000000000000000000000000000..9bce05f1458726ac107bbe5110c0c8f972116250
--- /dev/null
+++ b/chrome/browser/spellchecker/set_difference_container.h
@@ -0,0 +1,92 @@
+// Copyright (c) 2016 The Chromium Authors. All rights reserved.
please use gerrit instead 2016/02/03 23:59:11 no (c)
groby-ooo-7-16 2016/02/04 03:43:15 Do we have any reason to suspect a temporary set i
Kevin Bailey 2016/02/04 16:34:11 Done, and fixed in the file(s) that I copied it fr
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+//
+// A virtual container for iterating through the difference of two sets,
+// without having to construct a set.
please use gerrit instead 2016/02/03 23:59:11 This is more of a class comment, so let's move it
Kevin Bailey 2016/02/04 16:34:11 Done.
+
+#ifndef CHROME_BROWSER_SPELLCHECKER_SET_DIFFERENCE_CONTAINER_H_
+#define CHROME_BROWSER_SPELLCHECKER_SET_DIFFERENCE_CONTAINER_H_
+
+namespace spellcheck {
+
+template <typename Container1, typename Container2>
+class set_difference_container {
please use gerrit instead 2016/02/03 23:59:10 Class names are usually CamelCase. Is there a prec
Kevin Bailey 2016/02/04 16:34:11 Only standard C++ habit. Done.
+ public:
+ set_difference_container(
+ const Container1& container1,
+ const Container2& container2)
+ : in_beg(container1.begin()), in_end(container1.end()),
+ out_beg(container2.begin()), out_end(container2.end()) {}
please use gerrit instead 2016/02/03 23:59:10 Delegate the construction to the second constructo
Kevin Bailey 2016/02/04 16:34:11 Good idea. Done.
+
+ set_difference_container(
please use gerrit instead 2016/02/03 23:59:10 If you have a constructor, then you should have a
Kevin Bailey 2016/02/04 16:34:11 I went through 3 style guides and the only thing m
+ typename Container1::const_iterator x_beg,
+ typename Container1::const_iterator x_end,
+ typename Container2::const_iterator y_beg,
+ typename Container2::const_iterator y_end)
+ : in_beg(x_beg), in_end(x_end), out_beg(y_beg), out_end(y_end) {}
please use gerrit instead 2016/02/03 23:59:11 Do something similar to https://code.google.com/p/
Kevin Bailey 2016/02/04 16:34:11 Done.
+
+ class set_difference_iterator {
please use gerrit instead 2016/02/03 23:59:11 Internal classes usually come before constructors.
Kevin Bailey 2016/02/04 16:34:12 Done.
+ public:
+ set_difference_iterator() {}
+
+ set_difference_iterator(
please use gerrit instead 2016/02/03 23:59:11 Need a destructor too.
Kevin Bailey 2016/02/04 16:34:11 Acknowledged.
+ typename Container1::const_iterator x_beg,
+ typename Container1::const_iterator x_end,
+ typename Container2::const_iterator y_beg,
+ typename Container2::const_iterator y_end)
+ : in_beg(x_beg), in_end(x_end), out_beg(y_beg), out_end(y_end) {
+ // go to first valid value
+ MaybeIterate();
+ }
+
+ void MaybeIterate() {
+ while (in_beg != in_end && out_beg != out_end && *out_beg <= *in_beg) {
+ // skip over stuff that is equal
+ if (*in_beg == *out_beg)
+ ++in_beg;
+ // go to next in |out| that is >= |in|
+ ++out_beg;
+ }
+ }
+
+ set_difference_iterator operator++() {
please use gerrit instead 2016/02/03 23:59:10 Return a reference to avoid a copy.
Kevin Bailey 2016/02/04 16:34:11 Done.
+ // assert in_beg != in_end
please use gerrit instead 2016/02/03 23:59:10 #include "base/logging.h" DCHECK_NE(in_beg, in_en
Kevin Bailey 2016/02/04 16:34:11 Sorry, didn't work, I suspect, because it was atte
+ ++in_beg;
+ MaybeIterate();
+ return *this;
+ }
+
+ const typename Container1::value_type& operator*() {
+ // assert in_beg != in_end
+ return *in_beg;
+ }
+
+ bool operator!=(const set_difference_iterator& rhs) {
+ // This is completely cutting corners, but should work.
+ // |out| isn't really part of the state, and we just trust
+ // |end| to be correct.
+ return in_beg != rhs.in_beg;
+ }
+ private:
please use gerrit instead 2016/02/03 23:59:10 newline above private.
Kevin Bailey 2016/02/04 16:34:11 Done.
+ typename Container1::const_iterator in_beg, in_end;
+ typename Container2::const_iterator out_beg, out_end;
+ };
please use gerrit instead 2016/02/03 23:59:10 newline below };
Kevin Bailey 2016/02/04 16:34:11 Done.
+ typedef set_difference_iterator iterator;
+
+ iterator begin() const {
+ return iterator(in_beg, in_end, out_beg, out_end);
+ }
+
+ iterator end() const {
+ return iterator(in_end, in_end, out_end, out_end);
+ }
+
+ private:
+ typename Container1::const_iterator in_beg, in_end;
please use gerrit instead 2016/02/03 23:59:10 Each member variable on its own line, even if the
Kevin Bailey 2016/02/04 16:34:11 Done.
+ typename Container2::const_iterator out_beg, out_end;
please use gerrit instead 2016/02/03 23:59:10 Ditto.
Kevin Bailey 2016/02/04 16:34:11 Done.
+};
+
+} // namespace spellcheck
+
+#endif // CHROME_BROWSER_SPELLCHECKER_SET_DIFFERENCE_CONTAINER_H_

Powered by Google App Engine
This is Rietveld 408576698