OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "components/safe_browsing_db/prefix_set.h" | 5 #include "components/safe_browsing_db/prefix_set.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <utility> |
8 | 9 |
9 #include "base/files/file_util.h" | 10 #include "base/files/file_util.h" |
10 #include "base/files/scoped_file.h" | 11 #include "base/files/scoped_file.h" |
11 #include "base/logging.h" | 12 #include "base/logging.h" |
12 #include "base/md5.h" | 13 #include "base/md5.h" |
13 #include "base/metrics/histogram.h" | 14 #include "base/metrics/histogram.h" |
14 #include "base/metrics/sparse_histogram.h" | 15 #include "base/metrics/sparse_histogram.h" |
15 | 16 |
16 namespace safe_browsing { | 17 namespace safe_browsing { |
17 | 18 |
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
383 } | 384 } |
384 | 385 |
385 // Precisely size |index_| for read-only. It's 50k-60k, so minor savings, but | 386 // Precisely size |index_| for read-only. It's 50k-60k, so minor savings, but |
386 // they're almost free. | 387 // they're almost free. |
387 PrefixSet::IndexVector(prefix_set_->index_).swap(prefix_set_->index_); | 388 PrefixSet::IndexVector(prefix_set_->index_).swap(prefix_set_->index_); |
388 | 389 |
389 prefix_set_->full_hashes_ = hashes; | 390 prefix_set_->full_hashes_ = hashes; |
390 std::sort(prefix_set_->full_hashes_.begin(), prefix_set_->full_hashes_.end(), | 391 std::sort(prefix_set_->full_hashes_.begin(), prefix_set_->full_hashes_.end(), |
391 SBFullHashLess); | 392 SBFullHashLess); |
392 | 393 |
393 return prefix_set_.Pass(); | 394 return std::move(prefix_set_); |
394 } | 395 } |
395 | 396 |
396 scoped_ptr<const PrefixSet> PrefixSetBuilder::GetPrefixSetNoHashes() { | 397 scoped_ptr<const PrefixSet> PrefixSetBuilder::GetPrefixSetNoHashes() { |
397 return GetPrefixSet(std::vector<SBFullHash>()).Pass(); | 398 return GetPrefixSet(std::vector<SBFullHash>()); |
398 } | 399 } |
399 | 400 |
400 void PrefixSetBuilder::EmitRun() { | 401 void PrefixSetBuilder::EmitRun() { |
401 DCHECK(prefix_set_.get()); | 402 DCHECK(prefix_set_.get()); |
402 | 403 |
403 SBPrefix prev_prefix = buffer_[0]; | 404 SBPrefix prev_prefix = buffer_[0]; |
404 uint16_t run[PrefixSet::kMaxRun]; | 405 uint16_t run[PrefixSet::kMaxRun]; |
405 size_t run_pos = 0; | 406 size_t run_pos = 0; |
406 | 407 |
407 size_t i; | 408 size_t i; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
441 } | 442 } |
442 buffer_.push_back(prefix); | 443 buffer_.push_back(prefix); |
443 | 444 |
444 // Flush buffer when a run can be constructed. +1 for the index item, and +1 | 445 // Flush buffer when a run can be constructed. +1 for the index item, and +1 |
445 // to leave at least one item in the buffer for dropping duplicates. | 446 // to leave at least one item in the buffer for dropping duplicates. |
446 if (buffer_.size() > PrefixSet::kMaxRun + 2) | 447 if (buffer_.size() > PrefixSet::kMaxRun + 2) |
447 EmitRun(); | 448 EmitRun(); |
448 } | 449 } |
449 | 450 |
450 } // namespace safe_browsing | 451 } // namespace safe_browsing |
OLD | NEW |