diff options
author | Chris Xiong <chirs241097@gmail.com> | 2022-09-11 01:39:29 -0400 |
---|---|---|
committer | Chris Xiong <chirs241097@gmail.com> | 2022-09-11 01:39:29 -0400 |
commit | c41768dbbd50a0055298d5ec6318ae7f1d2e4ab3 (patch) | |
tree | 4fe4ec18a65424998c33c6654456b2551996ae39 /signature.cpp | |
parent | fd2773c2407aa475ba8aa4c8a72c91b83fd99c42 (diff) | |
download | deduper-c41768dbbd50a0055298d5ec6318ae7f1d2e4ab3.tar.xz |
New testdrive using sqlite db as data storage.
Add signature serialization & deserialization.
Only link what we need from OpenCV.
Diffstat (limited to 'signature.cpp')
-rw-r--r-- | signature.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/signature.cpp b/signature.cpp index fb4e8a3..74c7590 100644 --- a/signature.cpp +++ b/signature.cpp @@ -239,6 +239,32 @@ bool signature::operator==(const signature &o) const return *p == *o.p; } +std::string signature::to_string() const +{ + if (!p || !p->compressed) return std::string(); + Base64Encoder enc; + size_t sz = p->ct.size(); + enc.encode_data(&p->cfg, sizeof(signature_config)); + enc.encode_data(&sz, sizeof(size_t)); + enc.encode_data(p->ct.internal_data(), p->ct.internal_container_size() * 8); + return enc.finalize(); +} + +signature signature::from_string(std::string &&s) +{ + signature_priv *p = new signature_priv; + Base64Decoder dec(std::move(s)); + size_t sz; + p->compressed = true; + size_t s1 = dec.decode_data(&p->cfg, sizeof(signature_config)); + size_t s2 = dec.decode_data(&sz, sizeof(size_t)); + size_t s3 = dec.decoded_length() - s1 - s2; + p->ct.internal_set_size(sz); + p->ct.internal_container_resize(s3 / 8); + dec.decode_data(p->ct.internal_data(), s3); + return signature(p); +} + signature signature::from_preprocessed_matrix(cv::Mat *m, const signature_config &cfg) { signature_priv *p = new signature_priv; |