| OLD | NEW |
| 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 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 401 const NodeVector& vector, | 401 const NodeVector& vector, |
| 402 std::vector<std::unique_ptr<NodesSection>>& nodesSectionVector) { | 402 std::vector<std::unique_ptr<NodesSection>>& nodesSectionVector) { |
| 403 nodesSectionVector.clear(); | 403 nodesSectionVector.clear(); |
| 404 | 404 |
| 405 // Make a localized date formatter. | 405 // Make a localized date formatter. |
| 406 base::scoped_nsobject<NSDateFormatter> formatter( | 406 base::scoped_nsobject<NSDateFormatter> formatter( |
| 407 [[NSDateFormatter alloc] init]); | 407 [[NSDateFormatter alloc] init]); |
| 408 [formatter setDateFormat:@"MMMM yyyy"]; | 408 [formatter setDateFormat:@"MMMM yyyy"]; |
| 409 // Segregate nodes by creation date. | 409 // Segregate nodes by creation date. |
| 410 // Nodes that were created in the same month are grouped together. | 410 // Nodes that were created in the same month are grouped together. |
| 411 for (auto node : vector) { | 411 for (auto* node : vector) { |
| 412 base::mac::ScopedNSAutoreleasePool pool; | 412 base::mac::ScopedNSAutoreleasePool pool; |
| 413 base::Time dateAdded = node->date_added(); | 413 base::Time dateAdded = node->date_added(); |
| 414 base::TimeDelta delta = dateAdded - base::Time::UnixEpoch(); | 414 base::TimeDelta delta = dateAdded - base::Time::UnixEpoch(); |
| 415 base::scoped_nsobject<NSDate> date( | 415 base::scoped_nsobject<NSDate> date( |
| 416 [[NSDate alloc] initWithTimeIntervalSince1970:delta.InSeconds()]); | 416 [[NSDate alloc] initWithTimeIntervalSince1970:delta.InSeconds()]); |
| 417 NSString* dateString = [formatter stringFromDate:date]; | 417 NSString* dateString = [formatter stringFromDate:date]; |
| 418 const std::string timeRepresentation = base::SysNSStringToUTF8(dateString); | 418 const std::string timeRepresentation = base::SysNSStringToUTF8(dateString); |
| 419 | 419 |
| 420 BOOL found = NO; | 420 BOOL found = NO; |
| 421 for (const auto& nodesSection : nodesSectionVector) { | 421 for (const auto& nodesSection : nodesSectionVector) { |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 524 } | 524 } |
| 525 | 525 |
| 526 bookmark_utils_ios::SortFolders(&directDescendants); | 526 bookmark_utils_ios::SortFolders(&directDescendants); |
| 527 | 527 |
| 528 auto it = std::find(results->begin(), results->end(), folder); | 528 auto it = std::find(results->begin(), results->end(), folder); |
| 529 DCHECK(it != results->end()); | 529 DCHECK(it != results->end()); |
| 530 ++it; | 530 ++it; |
| 531 results->insert(it, directDescendants.begin(), directDescendants.end()); | 531 results->insert(it, directDescendants.begin(), directDescendants.end()); |
| 532 | 532 |
| 533 // Recursively perform the operation on each direct descendant. | 533 // Recursively perform the operation on each direct descendant. |
| 534 for (auto node : directDescendants) | 534 for (auto* node : directDescendants) |
| 535 UpdateFoldersFromNode(node, results, obstructions); | 535 UpdateFoldersFromNode(node, results, obstructions); |
| 536 } | 536 } |
| 537 | 537 |
| 538 void SortFolders(NodeVector* vector) { | 538 void SortFolders(NodeVector* vector) { |
| 539 UErrorCode error = U_ZERO_ERROR; | 539 UErrorCode error = U_ZERO_ERROR; |
| 540 std::unique_ptr<icu::Collator> collator(icu::Collator::createInstance(error)); | 540 std::unique_ptr<icu::Collator> collator(icu::Collator::createInstance(error)); |
| 541 if (U_FAILURE(error)) | 541 if (U_FAILURE(error)) |
| 542 collator.reset(NULL); | 542 collator.reset(NULL); |
| 543 std::sort(vector->begin(), vector->end(), | 543 std::sort(vector->begin(), vector->end(), |
| 544 FolderNodeComparator(collator.get())); | 544 FolderNodeComparator(collator.get())); |
| 545 } | 545 } |
| 546 | 546 |
| 547 NodeVector VisibleNonDescendantNodes(const NodeSet& obstructions, | 547 NodeVector VisibleNonDescendantNodes(const NodeSet& obstructions, |
| 548 bookmarks::BookmarkModel* model) { | 548 bookmarks::BookmarkModel* model) { |
| 549 NodeVector results; | 549 NodeVector results; |
| 550 | 550 |
| 551 NodeVector primaryNodes = PrimaryPermanentNodes(model); | 551 NodeVector primaryNodes = PrimaryPermanentNodes(model); |
| 552 NodeVector filteredPrimaryNodes; | 552 NodeVector filteredPrimaryNodes; |
| 553 for (auto node : primaryNodes) { | 553 for (auto* node : primaryNodes) { |
| 554 if (IsObstructed(node, obstructions)) | 554 if (IsObstructed(node, obstructions)) |
| 555 continue; | 555 continue; |
| 556 | 556 |
| 557 filteredPrimaryNodes.push_back(node); | 557 filteredPrimaryNodes.push_back(node); |
| 558 } | 558 } |
| 559 | 559 |
| 560 // Copy the results over. | 560 // Copy the results over. |
| 561 results = filteredPrimaryNodes; | 561 results = filteredPrimaryNodes; |
| 562 | 562 |
| 563 // Iterate over a static copy of the filtered, root folders. | 563 // Iterate over a static copy of the filtered, root folders. |
| 564 for (auto node : filteredPrimaryNodes) | 564 for (auto* node : filteredPrimaryNodes) |
| 565 UpdateFoldersFromNode(node, &results, obstructions); | 565 UpdateFoldersFromNode(node, &results, obstructions); |
| 566 | 566 |
| 567 return results; | 567 return results; |
| 568 } | 568 } |
| 569 | 569 |
| 570 // Whether |vector1| contains only elements of |vector2| in the same order. | 570 // Whether |vector1| contains only elements of |vector2| in the same order. |
| 571 BOOL IsSubvectorOfNodes(const NodeVector& vector1, const NodeVector& vector2) { | 571 BOOL IsSubvectorOfNodes(const NodeVector& vector1, const NodeVector& vector2) { |
| 572 NodeVector::const_iterator it = vector2.begin(); | 572 NodeVector::const_iterator it = vector2.begin(); |
| 573 // Scan the first vector. | 573 // Scan the first vector. |
| 574 for (const auto& node : vector1) { | 574 for (auto* node : vector1) { |
| 575 // Look for a match in the rest of the second vector. When found, advance | 575 // Look for a match in the rest of the second vector. When found, advance |
| 576 // the iterator on vector2 to only focus on the remaining part of vector2, | 576 // the iterator on vector2 to only focus on the remaining part of vector2, |
| 577 // so that ordering is verified. | 577 // so that ordering is verified. |
| 578 it = std::find(it, vector2.end(), node); | 578 it = std::find(it, vector2.end(), node); |
| 579 if (it == vector2.end()) | 579 if (it == vector2.end()) |
| 580 return NO; | 580 return NO; |
| 581 // If found in vector2, advance the iterator so that the match is only | 581 // If found in vector2, advance the iterator so that the match is only |
| 582 // matched once. | 582 // matched once. |
| 583 it++; | 583 it++; |
| 584 } | 584 } |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 675 | 675 |
| 676 *position = cache.position; | 676 *position = cache.position; |
| 677 return YES; | 677 return YES; |
| 678 } | 678 } |
| 679 | 679 |
| 680 void ClearPositionCache() { | 680 void ClearPositionCache() { |
| 681 [[NSUserDefaults standardUserDefaults] removeObjectForKey:kPositionCacheKey]; | 681 [[NSUserDefaults standardUserDefaults] removeObjectForKey:kPositionCacheKey]; |
| 682 } | 682 } |
| 683 | 683 |
| 684 } // namespace bookmark_utils_ios | 684 } // namespace bookmark_utils_ios |
| OLD | NEW |