loader.h 726 B

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