44 if (chunk->is_identical ==
false) {
58 sharing_info->remove_user_and_delete_if_last();
70 if (sc->is_identical) {
71 buffer_to_second_memchunk.
add(sc->buf, sc);
78 if (!fc->is_identical) {
81 sc->is_identical =
false;
82 fc->is_identical =
true;
96 chunk->is_identical_future =
false;
115 if (reference_memfile !=
nullptr) {
119 current_session_uid = mem_chunk->id_session_uid;
139 curchunk->
buf =
nullptr;
149 if (*compchunk_step !=
nullptr) {
151 if (compchunk->
size == curchunk->
size) {
152 if (memcmp(compchunk->
buf, buf, size) == 0) {
153 curchunk->
buf = compchunk->
buf;
162 if (curchunk->
buf ==
nullptr) {
163 char *buf_new =
static_cast<char *
>(
MEM_mallocN(size,
"Chunk buffer"));
164 memcpy(buf_new, buf, size);
165 curchunk->
buf = buf_new;
172 Main *bmain_undo =
nullptr;
178 bmain_undo = bfd->
main;
194 static size_t offset = 0;
196 size_t chunkoffset, readsize, totread;
224 if (seek - offset == chunk->
size) {
225 offset += chunk->
size;
230 if (chunk ==
nullptr) {
231 printf(
"illegal read, chunk zero\n");
235 chunkoffset = seek - offset;
236 readsize = size - totread;
241 if (chunkoffset + readsize > chunk->
size) {
242 readsize = chunk->
size - chunkoffset;
256 }
while (totread < size);
#define MAIN_ID_SESSION_UID_UNSET
const char * BKE_main_blendfile_path(const Main *bmain) ATTR_NONNULL()
#define LISTBASE_FOREACH(type, var, list)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void * BLI_pophead(ListBase *listbase) ATTR_NONNULL(1)
#define POINTER_OFFSET(v, ofs)
external readfile function prototypes.
BlendFileData * BLO_read_from_memfile(Main *oldmain, const char *filepath, MemFile *memfile, const BlendFileReadParams *params, ReportList *reports)
These structs are the foundation for all linked lists in the library system.
Read Guarded memory(de)allocation.
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
bool add(const Key &key, const Value &value)
Value lookup_default(const Key &key, const Value &default_value) const
void add_new(const Key &key, const Value &value)
void *(* MEM_mallocN)(size_t len, const char *str)
void MEM_freeN(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
MemFile * reference_memfile
blender::Map< uint, MemFileChunk * > id_session_uid_mapping
MemFile * written_memfile
uint current_id_session_uid
MemFileChunk * reference_current_chunk
MemFileSharedStorage * shared_storage
static void undo_close(FileReader *reader)
FileReader * BLO_memfile_new_filereader(MemFile *memfile, int undo_direction)
void BLO_memfile_chunk_add(MemFileWriteData *mem_data, const char *buf, size_t size)
void BLO_memfile_write_init(MemFileWriteData *mem_data, MemFile *written_memfile, MemFile *reference_memfile)
static int64_t undo_read(FileReader *reader, void *buffer, size_t size)
Main * BLO_memfile_main_get(MemFile *memfile, Main *bmain, Scene **r_scene)
void BLO_memfile_clear_future(MemFile *memfile)
void BLO_memfile_free(MemFile *memfile)
void BLO_memfile_merge(MemFile *first, MemFile *second)
void BLO_memfile_write_finalize(MemFileWriteData *mem_data)