mirror of
https://gitea.wildfiregames.com/0ad/0ad.git
synced 2026-07-20 07:27:46 +00:00
8667ea74c8
- directoryPosix: replace most methods with boost filesystem (but not all: the latter cannot efficiently enumerate files AND query their size/mtime) - AllocatorChecker: better name for member functions - file: move the File class here - trace: bugfix - io: move UnalignedWriter to write_buffer.cpp (basically the same thing) - vfs: remove unnecessary "vfs" warts from variable names - vfs_tree: VfsFile now stores single Name/Size/MTime fields instead of the FileInfo record (less clunky) - vfs_path: use boost filesystem's version of the basename/extension functions - lf_alloc: remove (no longer necessary, won't be finished - not worth the trouble) - path_util: remove path_foreach_component (replaced by better path traversal logic) and PathPackage (obsoleted by fs::path) ! resource loading code now receives VfsPath as its filename. there is also OsPath (native absolute path) and Path (relative to binaries/data) - tex is now independent of file loading code; it just en/decodes in-memory buffers - wdll_ver: clean up, use smart pointer to simplify bailout code - wsdl: remove nonexistent failure path from calc_gamma (cruised by here because SDL_SetGamme is failing once after a cold boot at work) - wsnd: simplify OpenAL DLL search, use boost::filesystem - wutil: Wow64 redirection is now packaged in a (RAII) class This was SVN commit r5525.
59 lines
1.1 KiB
C++
59 lines
1.1 KiB
C++
#ifndef INCLUDED_WRITE_BUFFER
|
|
#define INCLUDED_WRITE_BUFFER
|
|
|
|
class File;
|
|
|
|
class LIB_API WriteBuffer
|
|
{
|
|
public:
|
|
WriteBuffer();
|
|
|
|
void Append(const void* data, size_t size);
|
|
void Overwrite(const void* data, size_t size, size_t offset);
|
|
|
|
shared_ptr<u8> Data() const
|
|
{
|
|
return m_data;
|
|
}
|
|
|
|
size_t Size() const
|
|
{
|
|
return m_size;
|
|
}
|
|
|
|
private:
|
|
size_t m_capacity; // must come first (init order)
|
|
|
|
shared_ptr<u8> m_data;
|
|
size_t m_size;
|
|
};
|
|
|
|
|
|
class LIB_API UnalignedWriter : public boost::noncopyable
|
|
{
|
|
public:
|
|
UnalignedWriter(const File& file, off_t ofs);
|
|
~UnalignedWriter();
|
|
|
|
/**
|
|
* add data to the align buffer, writing it out to disk if full.
|
|
**/
|
|
LibError Append(const u8* data, size_t size) const;
|
|
|
|
/**
|
|
* zero-initialize any remaining space in the align buffer and write
|
|
* it to the file. this is called by the destructor.
|
|
**/
|
|
void Flush() const;
|
|
|
|
private:
|
|
LibError WriteBlock() const;
|
|
|
|
const File& m_file;
|
|
shared_ptr<u8> m_alignedBuf;
|
|
mutable off_t m_alignedOfs;
|
|
mutable size_t m_bytesUsed;
|
|
};
|
|
|
|
#endif // #ifndef INCLUDED_WRITE_BUFFER
|