aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/containers/comptrie/loader/loader.h
blob: ef3ba6911531a19fdd46cfaffac224e1cd14b30c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#pragma once 
 
#include <library/cpp/archive/yarchive.h>
#include <util/generic/string.h>
#include <util/generic/ptr.h> 
#include <util/generic/yexception.h> 
#include <util/memory/blob.h> 
 
template <class TrieType, size_t N> 
TrieType LoadTrieFromArchive(const TString& key,
                             const unsigned char (&data)[N], 
                             bool ignoreErrors = false) {
    TArchiveReader archive(TBlob::NoCopy(data, sizeof(data))); 
    if (archive.Has(key)) { 
        TAutoPtr<IInputStream> trie = archive.ObjectByKey(key);
        return TrieType(TBlob::FromStream(*trie)); 
    } 
    if (!ignoreErrors) { 
        ythrow yexception() << "Resource " << key << " not found"; 
    } 
    return TrieType(); 
}