Print loaded files and errors, enable loading and searching
This commit is contained in:
@@ -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 ⁢
|
||||
result = ⁢
|
||||
break;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
XArenaAddMutex.unlock();
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
bool XLoadingComplete() {
|
||||
bool result = MainWorkQueue.thread_count == XLoadThreadComplete;
|
||||
return result;
|
||||
}
|
||||
Reference in New Issue
Block a user