mirror of
https://gitea.wildfiregames.com/0ad/0ad
synced 2026-07-06 23:15:47 -07:00
this snowballed into a massive search+destroy of the hodgepodge of mostly equivalent types we had in use (int, uint, unsigned, unsigned int, i32, u32, ulong, uintN). it is more efficient to use 64-bit types in 64-bit mode, so the preferred default is size_t (for anything remotely resembling a size or index). tile coordinates are ssize_t to allow more efficient conversion to/from floating point. flags are int because we almost never need more than 15 distinct bits, bit test/set is not slower and int is fastest to type. finally, some data that is pretty much directly passed to OpenGL is now typed accordingly. after several hours, the code now requires fewer casts and less guesswork. other changes: - unit and player IDs now have an "invalid id" constant in the respective class to avoid casting and -1 - fix some endian/64-bit bugs in the map (un)packing. added a convenience function to write/read a size_t. - ia32: change CPUID interface to allow passing in ecx (required for cache topology detection, which I need at work). remove some unneeded functions from asm, replace with intrinsics where possible. This was SVN commit r5942.
67 lines
2.3 KiB
C
67 lines
2.3 KiB
C
/**
|
|
* =========================================================================
|
|
* File : file_system_util.h
|
|
* Project : 0 A.D.
|
|
* Description : helper functions for directory access
|
|
* =========================================================================
|
|
*/
|
|
|
|
// license: GPL; see lib/license.txt
|
|
|
|
#ifndef INCLUDED_FILE_SYSTEM_UTIL
|
|
#define INCLUDED_FILE_SYSTEM_UTIL
|
|
|
|
#include "lib/file/vfs/vfs.h"
|
|
|
|
extern void fs_SortFiles(FileInfos& files);
|
|
extern void fs_SortDirectories(DirectoryNames& directories);
|
|
|
|
extern LibError fs_GetPathnames(PIVFS fs, const VfsPath& path, const char* filter, VfsPaths& pathnames);
|
|
|
|
|
|
/**
|
|
* called for files in a directory.
|
|
*
|
|
* @param pathname full pathname (since FileInfo only gives the name).
|
|
* @param fileInfo file information
|
|
* @param cbData user-specified context
|
|
* @return INFO::CB_CONTINUE on success; any other value will immediately
|
|
* be returned to the caller (no more calls will be forthcoming).
|
|
*
|
|
* CAVEAT: pathname and fileInfo are only valid until the function
|
|
* returns!
|
|
**/
|
|
typedef LibError (*FileCallback)(const VfsPath& pathname, const FileInfo& fileInfo, const uintptr_t cbData);
|
|
|
|
enum DirFlags
|
|
{
|
|
DIR_RECURSIVE = 1
|
|
};
|
|
|
|
/**
|
|
* call back for each file in a directory tree
|
|
*
|
|
* @param cb see DirCallback
|
|
* @param pattern that file names must match. '*' and '&' wildcards
|
|
* are allowed. 0 matches everything.
|
|
* @param flags see DirFlags
|
|
* @param LibError
|
|
**/
|
|
extern LibError fs_ForEachFile(PIVFS fs, const VfsPath& path, FileCallback cb, uintptr_t cbData, const char* pattern = 0, int flags = 0);
|
|
|
|
|
|
/**
|
|
* determine the next available pathname with a given format.
|
|
* this is useful when creating new files without overwriting the previous
|
|
* ones (screenshots are a good example).
|
|
*
|
|
* @param pathnameFormat format string for the pathname; must contain one
|
|
* format specifier for a size_t.
|
|
* example: "screenshots/screenshot%04d.png"
|
|
* @param nextNumber in: the first number to try; out: the next number.
|
|
* if 0, numbers corresponding to existing files are skipped.
|
|
* @param nextPathname receives the output.
|
|
**/
|
|
extern void fs_NextNumberedFilename(PIVFS fs, const VfsPath& pathnameFormat, size_t& nextNumber, VfsPath& nextPathname);
|
|
|
|
#endif // #ifndef INCLUDED_FILE_SYSTEM_UTIL
|