| 403 | } |
| 404 | |
| 405 | static void read_data_dependencies(DataCompiler &dc |
| 406 | , FilesystemDisk &data_fs |
| 407 | , const HashMap<StringId64, DynamicString> &data_index |
| 408 | , const char *filename |
| 409 | ) |
| 410 | { |
| 411 | Buffer json(default_allocator()); |
| 412 | File *file = data_fs.open(filename, FileOpenMode::READ); |
| 413 | if (file->is_open()) |
| 414 | file->read_all(json); |
| 415 | data_fs.close(*file); |
| 416 | |
| 417 | TempAllocator1024 ta; |
| 418 | JsonObject obj(ta); |
| 419 | sjson::parse(obj, json); |
| 420 | |
| 421 | auto cur = json_object::begin(obj); |
| 422 | auto end = json_object::end(obj); |
| 423 | for (; cur != end; ++cur) { |
| 424 | JSON_OBJECT_SKIP_HOLE(obj, cur); |
| 425 | |
| 426 | StringId64 id; |
| 427 | id.parse(cur->first.data()); |
| 428 | |
| 429 | // Skip reading data that belongs to non-existent source file. |
| 430 | if (!hash_map::has(data_index, id)) |
| 431 | continue; |
| 432 | |
| 433 | JsonArray dependency_array(ta); |
| 434 | sjson::parse_array(dependency_array, cur->second); |
| 435 | for (u32 i = 0; i < array::size(dependency_array); ++i) { |
| 436 | DynamicString path(ta); |
| 437 | sjson::parse_string(path, dependency_array[i]); |
| 438 | if (path.has_prefix("//r ")) { |
| 439 | add_dependency_internal(dc._data_requirements, id, path.c_str() + 4); |
| 440 | } else if (path.has_prefix("//- ")) { |
| 441 | add_dependency_internal(dc._data_dependencies, id, path.c_str() + 4); |
| 442 | } else if (path.has_prefix("//? ")) { |
| 443 | const char *dependency = path.c_str() + 4; |
| 444 | u32 flags = DependencyFlags::OPTIONAL; |
| 445 | if ((dependency[0] == '0' || dependency[0] == '1') && dependency[1] == ' ') { |
| 446 | if (dependency[0] == '1') |
| 447 | flags |= DependencyFlags::EXISTS; |
| 448 | dependency += 2; |
| 449 | } |
| 450 | add_dependency_internal(dc._data_dependencies, id, dependency, flags); |
| 451 | } else { // Assume regular dependency |
| 452 | add_dependency_internal(dc._data_dependencies, id, path.c_str()); |
| 453 | } |
| 454 | } |
| 455 | } |
| 456 | } |
| 457 | |
| 458 | static s32 write_data_index(FilesystemDisk &data_fs, const char *filename, const HashMap<StringId64, DynamicString> &index) |
| 459 | { |
no test coverage detected