11#include "CoralBase/Blob.h"
21 uLongf comprLen = compressBound(strlen(in));
23 blob.resize(comprLen);
24 unsigned char* ptr =
static_cast<unsigned char*
>(blob.startingAddress());
25 if (compress(ptr, &comprLen,
reinterpret_cast<const unsigned char*
>(in), strlen(in)) != Z_OK) {
28 blob.resize(comprLen);
42 TMemFile
fout(
"buffer",
"recreate");
44 tree->CloneTree(-1,
"fast")->Write();
46 uLongf comprLen =
fout.GetSize();
47 unsigned char *buffer =
new unsigned char[comprLen];
48 fout.CopyTo(buffer, comprLen);
50 blob.resize(comprLen);
51 char* ptr =
reinterpret_cast<char*
>(blob.startingAddress());
63bool uncompressBlob(
const coral::Blob &blob, std::unique_ptr<
unsigned char[]> & out,
unsigned long& len){
64 uLongf uncompLen = 50000;
65 std::unique_ptr<unsigned char[]> uncompBuf(
new unsigned char[uncompLen+1]);
68 actualLen = uncompLen;
69 int res(uncompress(uncompBuf.get(), &actualLen,
reinterpret_cast<const unsigned char*
>(blob.startingAddress()),
static_cast<uLongf
>(blob.size())));
70 if(
res == Z_OK )
break;
71 if(
res == Z_BUF_ERROR) {
73 std::cout <<
"ATTENTION: Increasing buffer to " << uncompLen << std::endl;
74 uncompBuf.reset(
new unsigned char[uncompLen+1]);
81 uncompBuf.get()[actualLen]=0;
82 out = std::move(uncompBuf);
88 std::unique_ptr<unsigned char[]> bf {};
91 const char* cstring =
reinterpret_cast<const char*
>(bf.get());
92 out.assign(cstring, len);
100 out = nlohmann::json::parse(
str);
102 catch(
const std::exception& e) {
103 std::cout <<
"ATTENTION: Cannot unpack Blob object as JSON!" << std::endl;
110 const std::string_view name){
111 const char* cstring =
reinterpret_cast<const char*
>(blob.startingAddress());
113 sb.assign(cstring, blob.size());
115 TMemFile f(
"buffer",
reinterpret_cast<char*
>(bdata.data()), bdata.size());
117 f.GetObject(name.data(), t);
std::pair< std::vector< unsigned int >, bool > res
bool writeBlobFromJson(const nlohmann::json &, coral::Blob &)
bool readBlobAsString(const coral::Blob &, std::string &)
bool writeBlobFromTTree(TTree *, coral::Blob &)
bool uncompressBlob(const coral::Blob &, std::unique_ptr< unsigned char[]> &, unsigned long &)
bool compressBlob(const char *, coral::Blob &)
bool readBlobAsTTree(const coral::Blob &blob, std::unique_ptr< TTree > &tree, const std::string_view name="tree")
Interprets the coral::Blob as a TTree instance.
bool writeBlobFromString(const std::string_view, coral::Blob &)
bool readBlobAsJson(const coral::Blob &, nlohmann::json &)
std::vector< unsigned char > base64_decode(const std::string &)
std::string base64_encode(const unsigned char *, unsigned int)