1 #ifndef _MADARA_KNOWLEDGE_FILEFRAGMENTER_H_
2 #define _MADARA_KNOWLEDGE_FILEFRAGMENTER_H_
61 const std::string& filename,
size_t frag_size = 60000)
68 "FileFragmenter::fragment_file: "
69 "read file %s, contents of size %d is at %p.\n",
70 filename.c_str(), (
int)
file_size, buffer);
78 "FileFragmenter::fragment_file: "
79 "ERROR: Could not read file %s.\n",
94 char* buffer,
size_t size,
size_t frag_size = 60000)
96 size_t num_frags = size / frag_size;
97 size_t extra = size % frag_size;
105 memcpy(segment.
get(), &(buffer[num_frags * frag_size]), extra);
106 records[num_frags].set_file(segment.
get(), extra);
114 for (
size_t i = 0; i < num_frags; ++i)
117 memcpy(segment.
get(), &(buffer[i * frag_size]), frag_size);
118 records[i].set_file(segment.
get(), frag_size);
137 for (
size_t i = 0; i <
records.size(); ++i)
157 bool has_missing =
false;
163 "FileFragmenter::from_kb:"
164 " iterating through each record in %d records at %s\n",
165 (
int)
records.size(), key.c_str());
171 if (record.is_file_type())
178 "FileFragmenter::from_kb:"
179 " missing fragment\n");
186 "FileFragmenter::from_kb:"
187 " after iterations, file_size=%d\n",
200 std::shared_ptr<const std::vector<unsigned char>>
binary =
201 record.share_binary();
204 "FileFragmenter::from_kb:"
205 " copying %d bytes to file_contents\n",
208 memcpy(current,
binary->data(), record.size());
210 current += record.size();
213 "FileFragmenter::from_kb:"
214 " proceeding to next record copy\n");
221 "FileFragmenter::from_kb:"
222 " missing fragments. Not rebuilding file_contents\n");
#define madara_logger_ptr_log(loggering, level,...)
Fast version of the madara::logger::log method for Logger pointers.
Splits files into fragments that can be saved to and loaded from a knowledge base.
FileFragmenter(char *buffer, size_t size, size_t frag_size=60000)
Constructor.
size_t fragment_file(const std::string &filename, size_t frag_size=60000)
Fragments a file into smaller buffers up to a specified size.
containers::Vector create_vector(const std::string &key, KnowledgeBase &kb, const KnowledgeUpdateSettings &settings=KnowledgeUpdateSettings::GLOBAL_AS_LOCAL_NO_EXPAND)
Creates a vector in a knowledge base with the current file fragments.
size_t fragment_buffer(char *buffer, size_t size, size_t frag_size=60000)
Fragments a file into smaller buffers up to a specified size.
FileFragmenter()
Constructor.
utility::ScopedArray< char > file_contents
the buffer that holds the file contents
size_t from_kb(const std::string &key, KnowledgeBase &kb, const KnowledgeUpdateSettings &settings=KnowledgeUpdateSettings::GLOBAL_AS_LOCAL_NO_EXPAND)
Creates a vector in a knowledge base with the current file fragments.
const char * get_file_contents(void)
Returns the file contents as a character buffer.
KnowledgeVector records
records that contain the file fragments
size_t file_size
the size of the file contents
FileFragmenter(const std::string &filename, size_t frag_size=60000)
Constructor.
This class provides a distributed knowledge base to users.
Settings for applying knowledge updates.
static const KnowledgeUpdateSettings GLOBAL_AS_LOCAL_NO_EXPAND
This class stores a vector of KaRL variables.
void copy_to(KnowledgeVector &target) const
Copies the vector elements to an STL vector of Knowledge Records.
void push_back(KnowledgeRecord value)
Pushes the value to the end of the array after incrementing the array size.
T * get(void)
get the underlying pointer
Provides functions and classes for the distributed knowledge base.
::std::vector< KnowledgeRecord > KnowledgeVector
T get(const KnowledgeRecord &kr)
Get the value of a KnowlegeRecord.
MADARA_EXPORT utility::Refcounter< logger::Logger > global_logger
int read_file(const std::string &filename, void *&buffer, size_t &size, bool add_zero_char)
Reads a file into a provided void pointer.
Copyright(c) 2020 Galois.