summaryrefslogtreecommitdiff
path: root/cpp/src/IcePatch2/Util.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IcePatch2/Util.cpp')
-rw-r--r--cpp/src/IcePatch2/Util.cpp108
1 files changed, 37 insertions, 71 deletions
diff --git a/cpp/src/IcePatch2/Util.cpp b/cpp/src/IcePatch2/Util.cpp
index b1c1adf8439..a1682caba19 100644
--- a/cpp/src/IcePatch2/Util.cpp
+++ b/cpp/src/IcePatch2/Util.cpp
@@ -718,6 +718,43 @@ IcePatch2::loadFileInfoSeq(const string& path, FileInfoSeq& infoSeq)
}
void
+IcePatch2::getFileTree1(const FileInfoSeq& infoSeq, FileTree1& tree1)
+{
+ if(infoSeq.empty())
+ {
+ tree1.files.clear();
+ tree1.checksum.resize(20, 0);
+ }
+ else
+ {
+ tree1.files.reserve(infoSeq.size());
+
+ FileInfoSeq::const_iterator p = infoSeq.begin();
+
+ ByteSeq allChecksums;
+ allChecksums.resize(infoSeq.size() * 20);
+ ByteSeq::iterator q = allChecksums.begin();
+
+ while(p < infoSeq.end())
+ {
+ tree1.files.push_back(*p);
+
+ assert(p->checksum.size() == 20);
+ copy(p->checksum.begin(), p->checksum.end(), q);
+
+ ++p;
+ q += 20;
+ }
+
+ sort(tree1.files.begin(), tree1.files.end(), FileInfoCompare());
+
+ tree1.checksum.resize(20);
+ SHA1(reinterpret_cast<unsigned char*>(&allChecksums[0]), allChecksums.size(),
+ reinterpret_cast<unsigned char*>(&tree1.checksum[0]));
+ }
+}
+
+void
IcePatch2::getFileTree0(const FileInfoSeq& infoSeq, FileTree0& tree0)
{
tree0.nodes.resize(256);
@@ -751,77 +788,6 @@ IcePatch2::getFileTree0(const FileInfoSeq& infoSeq, FileTree0& tree0)
reinterpret_cast<unsigned char*>(&tree0.checksum[0]));
}
-void
-IcePatch2::getFileTree1(const FileInfoSeq& infoSeq, FileTree1& tree1)
-{
- tree1.nodes.resize(256);
-
- ByteSeq allChecksums;
- allChecksums.resize(256 * 20);
- ByteSeq::iterator q = allChecksums.begin();
-
- for(int i = 0; i < 256; ++i)
- {
- FileInfoSeq infoSeq2;
-
- for(FileInfoSeq::const_iterator p = infoSeq.begin(); p != infoSeq.end(); ++p)
- {
- if(i == static_cast<int>(p->checksum[20 - 1]))
- {
- infoSeq2.push_back(*p);
- }
- }
-
- getFileTree2(infoSeq2, tree1.nodes[i]);
-
- assert(tree1.nodes[i].checksum.size() == 20);
- copy(tree1.nodes[i].checksum.begin(), tree1.nodes[i].checksum.end(), q);
-
- q += 20;
- }
-
- tree1.checksum.resize(20);
- SHA1(reinterpret_cast<unsigned char*>(&allChecksums[0]), allChecksums.size(),
- reinterpret_cast<unsigned char*>(&tree1.checksum[0]));
-}
-
-void
-IcePatch2::getFileTree2(const FileInfoSeq& infoSeq, FileTree2& tree2)
-{
- if(infoSeq.empty())
- {
- tree2.files.clear();
- tree2.checksum.resize(20, 0);
- }
- else
- {
- tree2.files.reserve(infoSeq.size());
-
- FileInfoSeq::const_iterator p = infoSeq.begin();
-
- ByteSeq allChecksums;
- allChecksums.resize(infoSeq.size() * 20);
- ByteSeq::iterator q = allChecksums.begin();
-
- while(p < infoSeq.end())
- {
- tree2.files.push_back(*p);
-
- assert(p->checksum.size() == 20);
- copy(p->checksum.begin(), p->checksum.end(), q);
-
- ++p;
- q += 20;
- }
-
- sort(tree2.files.begin(), tree2.files.end(), FileInfoCompare());
-
- tree2.checksum.resize(20);
- SHA1(reinterpret_cast<unsigned char*>(&allChecksums[0]), allChecksums.size(),
- reinterpret_cast<unsigned char*>(&tree2.checksum[0]));
- }
-}
-
ostream&
IcePatch2::operator<<(ostream& os, const FileInfo& info)
{