Print loaded files and errors, enable loading and searching

This commit is contained in:
Krzosa Karol
2024-07-06 09:51:39 +02:00
parent e3a176b2f9
commit 22828c9d23
7 changed files with 173 additions and 94 deletions

View File

@@ -65,9 +65,24 @@ struct XToTimeString {
String filepath;
};
Arena XArena;
std::mutex XArenaAddMutex;
Array<XToTimeString> XToTime;
struct FileLoadResult {
String filename;
String error;
};
Arena XArena;
std::mutex XArenaAddMutex;
Array<XToTimeString> XToTime;
Array<FileLoadResult> XFileLoadResults;
int64_t XLoadThreadComplete;
void XInitLoading() {
InitArena(&XArena);
XArena.align = 0;
XToTime.reserve(1000000);
XFileLoadResults.reserve(10000);
}
WORK_FUNCTION(ParseFilesWork) {
ParseThreadIO *io = (ParseThreadIO *)data;
@@ -82,12 +97,27 @@ WORK_FUNCTION(ParseFilesWork) {
XToTime.add({s, it.hour, it.minute, it.second, it_time_file});
}
XArenaAddMutex.unlock();
XFileLoadResults.bounded_add({it_time_file});
}
AtomicIncrement(&XLoadThreadComplete);
}
String XGetArenaString() {
XArenaAddMutex.lock();
String buffer = {(char *)XArena.data, (int64_t)XArena.len};
XArenaAddMutex.unlock();
return buffer;
}
Array<FileLoadResult> XLockFileLoadResults() {
return XFileLoadResults;
}
void XUnlockFileResults() {
}
void XAddFolder(String folder, Array<String> *filenames) {
Scratch scratch;
Scratch scratch;
Array<String> srt_files = {scratch};
for (FileIter iter = IterateFiles(scratch, folder); IsValid(iter); Advance(&iter)) {
String file = Copy(Perm, iter.absolute_path);
@@ -97,15 +127,20 @@ void XAddFolder(String folder, Array<String> *filenames) {
}
}
int64_t thread_count = 16;
if (srt_files.len == 0) {
XFileLoadResults.add({Copy(Perm, folder), "no files found"});
return;
}
int64_t thread_count = MainWorkQueue.thread_count;
int64_t files_per_thread = srt_files.len / thread_count;
int64_t remainder = srt_files.len % thread_count;
int64_t fi = 0;
Array<ParseThreadIO> io = {scratch};
Array<ParseThreadIO> io = {Perm};
io.reserve(thread_count);
for (int ti = 0; ti < thread_count; ti += 1) {
Array<String> files = {scratch};
Array<String> files = {Perm};
for (int i = 0; fi < srt_files.len && i < files_per_thread + remainder; fi += 1, i += 1) {
files.add(srt_files[fi]);
}
@@ -115,18 +150,27 @@ void XAddFolder(String folder, Array<String> *filenames) {
i->input_files = files;
PushWork(&MainWorkQueue, (void *)i, ParseFilesWork);
}
WaitUntilCompletion(&MainWorkQueue);
}
XToTimeString *XFindItem(String string) {
XToTimeString *result = NULL;
XArenaAddMutex.lock();
For(XToTime) {
uintptr_t begin = (uintptr_t)(it.string.data);
uintptr_t end = (uintptr_t)(it.string.data + it.string.len);
uintptr_t needle = (uintptr_t)string.data;
if (needle >= begin && needle < end) {
return &it;
result = &it;
break;
}
}
return NULL;
XArenaAddMutex.unlock();
return result;
}
bool XLoadingComplete() {
bool result = MainWorkQueue.thread_count == XLoadThreadComplete;
return result;
}