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

Side by Side Diff: ios/chrome/browser/ui/bookmarks/bookmark_utils_ios.mm

Issue 2617243002: Remove ScopedVector from ios/. (Closed)
Patch Set: rebase Created 3 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2014 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2014 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 #import "ios/chrome/browser/ui/bookmarks/bookmark_utils_ios.h" 5 #import "ios/chrome/browser/ui/bookmarks/bookmark_utils_ios.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8
8 #include <memory> 9 #include <memory>
10 #include <vector>
9 11
10 #include "base/hash.h" 12 #include "base/hash.h"
11 #include "base/i18n/string_compare.h" 13 #include "base/i18n/string_compare.h"
12 #include "base/mac/bind_objc_block.h" 14 #include "base/mac/bind_objc_block.h"
13 #include "base/mac/scoped_nsautorelease_pool.h" 15 #include "base/mac/scoped_nsautorelease_pool.h"
14 #include "base/mac/scoped_nsobject.h" 16 #include "base/mac/scoped_nsobject.h"
17 #include "base/memory/ptr_util.h"
15 #include "base/metrics/user_metrics_action.h" 18 #include "base/metrics/user_metrics_action.h"
16 #include "base/strings/sys_string_conversions.h" 19 #include "base/strings/sys_string_conversions.h"
17 #include "base/strings/utf_string_conversions.h" 20 #include "base/strings/utf_string_conversions.h"
18 #include "components/bookmarks/browser/bookmark_model.h" 21 #include "components/bookmarks/browser/bookmark_model.h"
19 #include "components/query_parser/query_parser.h" 22 #include "components/query_parser/query_parser.h"
20 #include "components/strings/grit/components_strings.h" 23 #include "components/strings/grit/components_strings.h"
21 #include "ios/chrome/browser/bookmarks/bookmarks_utils.h" 24 #include "ios/chrome/browser/bookmarks/bookmarks_utils.h"
22 #include "ios/chrome/browser/experimental_flags.h" 25 #include "ios/chrome/browser/experimental_flags.h"
23 #import "ios/chrome/browser/ui/bookmarks/bookmark_collection_cells.h" 26 #import "ios/chrome/browser/ui/bookmarks/bookmark_collection_cells.h"
24 #import "ios/chrome/browser/ui/bookmarks/bookmark_menu_item.h" 27 #import "ios/chrome/browser/ui/bookmarks/bookmark_menu_item.h"
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 390
388 return firstParent; 391 return firstParent;
389 } 392 }
390 393
391 #pragma mark - Segregation of nodes by time. 394 #pragma mark - Segregation of nodes by time.
392 395
393 NodesSection::NodesSection() {} 396 NodesSection::NodesSection() {}
394 397
395 NodesSection::~NodesSection() {} 398 NodesSection::~NodesSection() {}
396 399
397 // Sorts NodesSection by their time. 400 void segregateNodes(
398 class NodesSectionComparator : public std::binary_function<const NodesSection*, 401 const NodeVector& vector,
399 const NodesSection*, 402 std::vector<std::unique_ptr<NodesSection>>& nodesSectionVector) {
400 bool> {
401 public:
402 // Returns true if |n1| preceeds |n2|.
403 bool operator()(const NodesSection* n1, const NodesSection* n2) {
404 return n1->time > n2->time;
405 }
406 };
407
408 // Sorts bookmark nodes by their creation time.
409 class NodeCreationComparator : public std::binary_function<const BookmarkNode*,
410 const BookmarkNode*,
411 bool> {
412 public:
413 // Returns true if |n1| preceeds |n2|.
414 bool operator()(const BookmarkNode* n1, const BookmarkNode* n2) {
415 return n1->date_added() > n2->date_added();
416 }
417 };
418
419 void segregateNodes(const NodeVector& vector,
420 ScopedVector<NodesSection>& nodesSectionVector) {
421 nodesSectionVector.clear(); 403 nodesSectionVector.clear();
422 404
423 // Make a localized date formatter. 405 // Make a localized date formatter.
424 base::scoped_nsobject<NSDateFormatter> formatter( 406 base::scoped_nsobject<NSDateFormatter> formatter(
425 [[NSDateFormatter alloc] init]); 407 [[NSDateFormatter alloc] init]);
426 [formatter setDateFormat:@"MMMM yyyy"]; 408 [formatter setDateFormat:@"MMMM yyyy"];
427 // Segregate nodes by creation date. 409 // Segregate nodes by creation date.
428 // Nodes that were created in the same month are grouped together. 410 // Nodes that were created in the same month are grouped together.
429 for (auto node : vector) { 411 for (auto node : vector) {
430 base::mac::ScopedNSAutoreleasePool pool; 412 base::mac::ScopedNSAutoreleasePool pool;
431 base::Time dateAdded = node->date_added(); 413 base::Time dateAdded = node->date_added();
432 base::TimeDelta delta = dateAdded - base::Time::UnixEpoch(); 414 base::TimeDelta delta = dateAdded - base::Time::UnixEpoch();
433 base::scoped_nsobject<NSDate> date( 415 base::scoped_nsobject<NSDate> date(
434 [[NSDate alloc] initWithTimeIntervalSince1970:delta.InSeconds()]); 416 [[NSDate alloc] initWithTimeIntervalSince1970:delta.InSeconds()]);
435 NSString* dateString = [formatter stringFromDate:date]; 417 NSString* dateString = [formatter stringFromDate:date];
436 const std::string timeRepresentation = base::SysNSStringToUTF8(dateString); 418 const std::string timeRepresentation = base::SysNSStringToUTF8(dateString);
437 419
438 BOOL found = NO; 420 BOOL found = NO;
439 for (NodesSection* nodesSection : nodesSectionVector) { 421 for (const auto& nodesSection : nodesSectionVector) {
440 if (nodesSection->timeRepresentation == timeRepresentation) { 422 if (nodesSection->timeRepresentation == timeRepresentation) {
441 nodesSection->vector.push_back(node); 423 nodesSection->vector.push_back(node);
442 found = YES; 424 found = YES;
443 break; 425 break;
444 } 426 }
445 } 427 }
446 428
447 if (found) 429 if (found)
448 continue; 430 continue;
449 431
450 // No NodesSection found. 432 // No NodesSection found.
451 NodesSection* nodesSection = new NodesSection; 433 auto nodesSection = base::MakeUnique<NodesSection>();
452 nodesSection->time = dateAdded; 434 nodesSection->time = dateAdded;
453 nodesSection->timeRepresentation = timeRepresentation; 435 nodesSection->timeRepresentation = timeRepresentation;
454 nodesSection->vector.push_back(node); 436 nodesSection->vector.push_back(node);
455 nodesSectionVector.push_back(nodesSection); 437 nodesSectionVector.push_back(std::move(nodesSection));
456 } 438 }
457 439
458 // Sort the NodesSections. 440 // Sort the NodesSections.
459 std::sort(nodesSectionVector.begin(), nodesSectionVector.end(), 441 std::sort(nodesSectionVector.begin(), nodesSectionVector.end(),
460 NodesSectionComparator()); 442 [](const std::unique_ptr<NodesSection>& n1,
443 const std::unique_ptr<NodesSection>& n2) {
444 return n1->time > n2->time;
445 });
461 446
462 // For each NodesSection, sort the nodes inside. 447 // For each NodesSection, sort the nodes inside.
463 for (NodesSection* nodesSection : nodesSectionVector) 448 for (const auto& nodesSection : nodesSectionVector) {
464 std::sort(nodesSection->vector.begin(), nodesSection->vector.end(), 449 std::sort(nodesSection->vector.begin(), nodesSection->vector.end(),
465 NodeCreationComparator()); 450 [](const BookmarkNode* n1, const BookmarkNode* n2) {
451 return n1->date_added() > n2->date_added();
452 });
453 }
466 } 454 }
467 455
468 #pragma mark - Useful bookmark manipulation. 456 #pragma mark - Useful bookmark manipulation.
469 457
470 // Adds all children of |folder| that are not obstructed to |results|. They are 458 // Adds all children of |folder| that are not obstructed to |results|. They are
471 // placed immediately after |folder|, using a depth-first, then alphabetically 459 // placed immediately after |folder|, using a depth-first, then alphabetically
472 // ordering. |results| must contain |folder|. 460 // ordering. |results| must contain |folder|.
473 void UpdateFoldersFromNode(const BookmarkNode* folder, 461 void UpdateFoldersFromNode(const BookmarkNode* folder,
474 NodeVector* results, 462 NodeVector* results,
475 const NodeSet& obstructions); 463 const NodeSet& obstructions);
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
695 683
696 *position = cache.position; 684 *position = cache.position;
697 return YES; 685 return YES;
698 } 686 }
699 687
700 void ClearPositionCache() { 688 void ClearPositionCache() {
701 [[NSUserDefaults standardUserDefaults] removeObjectForKey:kPositionCacheKey]; 689 [[NSUserDefaults standardUserDefaults] removeObjectForKey:kPositionCacheKey];
702 } 690 }
703 691
704 } // namespace bookmark_utils_ios 692 } // namespace bookmark_utils_ios
OLDNEW
« no previous file with comments | « ios/chrome/browser/ui/bookmarks/bookmark_utils_ios.h ('k') | ios/chrome/browser/ui/bookmarks/bookmark_utils_ios_unittest.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698