mirror of
https://github.com/facebook/sapling.git
synced 2024-10-10 16:57:49 +03:00
8b9261f2a1
Summary: Per discussion with bolinfest, this brings Eden in line with clang-format. This diff was generated with `find . \( -iname '*.cpp' -o -iname '*.h' \) -exec bash -c "yes | arc lint {}" \;` Reviewed By: bolinfest Differential Revision: D6232695 fbshipit-source-id: d54942bf1c69b5b0dcd4df629f1f2d5538c9e28c
69 lines
1.7 KiB
C++
69 lines
1.7 KiB
C++
/*
|
|
* Copyright (c) 2016-present, Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*
|
|
*/
|
|
#pragma once
|
|
|
|
#include <algorithm>
|
|
#include <vector>
|
|
#include "Hash.h"
|
|
#include "TreeEntry.h"
|
|
|
|
namespace facebook {
|
|
namespace eden {
|
|
|
|
class Tree {
|
|
public:
|
|
explicit Tree(std::vector<TreeEntry>&& entries, const Hash& hash = Hash())
|
|
: hash_(hash), entries_(std::move(entries)) {}
|
|
|
|
const Hash& getHash() const {
|
|
return hash_;
|
|
}
|
|
|
|
const std::vector<TreeEntry>& getTreeEntries() const {
|
|
return entries_;
|
|
}
|
|
|
|
const TreeEntry& getEntryAt(size_t index) const {
|
|
return entries_.at(index);
|
|
}
|
|
|
|
const TreeEntry* getEntryPtr(PathComponentPiece path) const {
|
|
auto iter = std::lower_bound(
|
|
entries_.cbegin(),
|
|
entries_.cend(),
|
|
path,
|
|
[](const TreeEntry& entry, PathComponentPiece piece) {
|
|
return entry.getName() < piece;
|
|
});
|
|
if (UNLIKELY(iter == entries_.cend() || iter->getName() != path)) {
|
|
return nullptr;
|
|
}
|
|
return &*iter;
|
|
}
|
|
|
|
const TreeEntry& getEntryAt(PathComponentPiece path) const {
|
|
auto entry = getEntryPtr(path);
|
|
if (!entry) {
|
|
throw std::out_of_range(
|
|
folly::to<std::string>(path, " is not present in this Tree"));
|
|
}
|
|
return *entry;
|
|
}
|
|
|
|
private:
|
|
const Hash hash_;
|
|
const std::vector<TreeEntry> entries_;
|
|
};
|
|
|
|
bool operator==(const Tree& tree1, const Tree& tree2);
|
|
bool operator!=(const Tree& tree1, const Tree& tree2);
|
|
} // namespace eden
|
|
} // namespace facebook
|