From a036524c52d290d54946e9e6392fcb0df2fa41df Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Sun, 9 Apr 2017 02:13:17 -0500 Subject: [PATCH] Encapsulate FileStoreHeader members --- src/ox/fs/filestore.hpp | 144 +++++++++++++++++++++++++++++----------- 1 file changed, 106 insertions(+), 38 deletions(-) diff --git a/src/ox/fs/filestore.hpp b/src/ox/fs/filestore.hpp index 6f3dbe39b..f4d5e3f03 100644 --- a/src/ox/fs/filestore.hpp +++ b/src/ox/fs/filestore.hpp @@ -14,17 +14,85 @@ namespace fs { template struct FileStoreHeader { - typedef InodeId InodeId_t; - typedef FsT FsSize_t; - const static auto VERSION = 4; + public: + typedef InodeId InodeId_t; + typedef FsT FsSize_t; + const static auto VERSION = 4; - uint16_t version; - uint16_t fsType; - FsSize_t size; - FsSize_t memUsed; - FsSize_t rootInode; + private: + uint16_t m_version; + uint16_t m_fsType; + FsSize_t m_size; + FsSize_t m_memUsed; + FsSize_t m_rootInode; + + public: + void setVersion(uint16_t); + uint16_t getVersion(); + + void setFsType(uint16_t); + uint16_t getFsType(); + + void setSize(FsSize_t); + FsSize_t getSize(); + + void setMemUsed(FsSize_t); + FsSize_t getMemUsed(); + + void setRootInode(FsSize_t); + FsSize_t getRootInode(); }; +template +void FileStoreHeader::setVersion(uint16_t version) { + m_version = version; +} + +template +uint16_t FileStoreHeader::getVersion() { + return m_version; +} + +template +void FileStoreHeader::setFsType(uint16_t fsType) { + m_fsType = fsType; +} + +template +uint16_t FileStoreHeader::getFsType() { + return m_fsType; +} + +template +void FileStoreHeader::setSize(FsSize_t size) { + m_size = size; +} + +template +FsSize_t FileStoreHeader::getSize() { + return m_size; +} + +template +void FileStoreHeader::setMemUsed(FsSize_t memUsed) { + m_memUsed = memUsed; +} + +template +FsSize_t FileStoreHeader::getMemUsed() { + return m_memUsed; +} + +template +void FileStoreHeader::setRootInode(FsSize_t rootInode) { + m_rootInode = rootInode; +} + +template +FsSize_t FileStoreHeader::getRootInode() { + return m_rootInode; +} + template class FileStore { @@ -205,7 +273,7 @@ class FileStore { } uint8_t *end() { - return begin() + this->m_header.size; + return begin() + this->m_header.getSize(); } /** @@ -264,16 +332,16 @@ int FileStore
::dumpTo(FileStore
*dest) { template void FileStore
::resize(typename Header::FsSize_t size) { - if (size < m_header.size) { + if (size < m_header.getSize()) { // shrink file store - if (m_header.memUsed > size) { - size = m_header.memUsed; + if (m_header.getMemUsed() > size) { + size = m_header.getMemUsed(); } compact(); - m_header.size = size; - } else if (size > m_header.size) { + m_header.setSize(size); + } else if (size > m_header.getSize()) { // grow file store - m_header.size = size; + m_header.setSize(size); } } @@ -281,14 +349,14 @@ template int FileStore
::write(InodeId_t id, void *data, typename Header::FsSize_t dataLen, uint8_t fileType) { auto retval = 1; const typename Header::FsSize_t size = sizeof(Inode) + dataLen; - if (size <= (m_header.size - m_header.memUsed)) { + if (size <= (m_header.getSize() - m_header.getMemUsed())) { auto inode = (Inode*) alloc(size); if (inode) { remove(id); inode->id = id; inode->fileType = fileType; inode->setData(data, dataLen); - auto root = ptr(m_header.rootInode); + auto root = ptr(m_header.getRootInode()); if (insert(root, inode) || root == inode) { retval = 0; } @@ -299,7 +367,7 @@ int FileStore
::write(InodeId_t id, void *data, typename Header::FsSize_t template int FileStore
::remove(InodeId_t id) { - return remove(ptr(m_header.rootInode), id); + return remove(ptr(m_header.getRootInode()), id); } template @@ -346,10 +414,10 @@ int FileStore
::remove(Inode *root, InodeId_t id) { err = 0; } } - } else if (ptr(m_header.rootInode)->id == id) { - m_header.rootInode = root->right; + } else if (ptr(m_header.getRootInode())->id == id) { + m_header.setRootInode(root->right); if (root->left) { - insert(ptr(m_header.rootInode), ptr(root->left)); + insert(ptr(m_header.getRootInode()), ptr(root->left)); } dealloc(root); root->id = 0; @@ -368,14 +436,14 @@ void FileStore
::dealloc(Inode *inode) { prev->next = ptr(next); next->prev = ptr(prev); - m_header.memUsed -= inode->size(); + m_header.setMemUsed(m_header.getMemUsed() - inode->size()); ox_memset(inode, 0, inode->size()); } template void FileStore
::updateInodeAddress(InodeId_t id, typename Header::FsSize_t oldAddr, typename Header::FsSize_t newAddr) { - auto parent = getInodeParent(ptr(m_header.rootInode), id, oldAddr); + auto parent = getInodeParent(ptr(m_header.getRootInode()), id, oldAddr); if (parent) { if (parent->left == oldAddr) { parent->left = newAddr; @@ -387,7 +455,7 @@ void FileStore
::updateInodeAddress(InodeId_t id, typename Header::FsSize template int FileStore
::read(InodeId_t id, void *data, typename Header::FsSize_t *size) { - auto inode = getInode(ptr(m_header.rootInode), id); + auto inode = getInode(ptr(m_header.getRootInode()), id); int retval = 1; if (inode) { if (size) { @@ -401,7 +469,7 @@ int FileStore
::read(InodeId_t id, void *data, typename Header::FsSize_t template typename FileStore
::StatInfo FileStore
::stat(InodeId_t id) { - auto inode = getInode(ptr(m_header.rootInode), id); + auto inode = getInode(ptr(m_header.getRootInode()), id); StatInfo stat; if (inode) { stat.size = inode->dataLen; @@ -416,7 +484,7 @@ typename FileStore
::StatInfo FileStore
::stat(InodeId_t id) { template typename Header::FsSize_t FileStore
::spaceNeeded(InodeId_t id, typename Header::FsSize_t size) { typename Header::FsSize_t needed = sizeof(Inode) + size;; - auto inode = getInode(ptr(m_header.rootInode), id); + auto inode = getInode(ptr(m_header.getRootInode()), id); if (inode) { needed -= inode->size(); } @@ -425,12 +493,12 @@ typename Header::FsSize_t FileStore
::spaceNeeded(InodeId_t id, typename template typename Header::FsSize_t FileStore
::size() { - return m_header.size; + return m_header.getSize(); } template typename Header::FsSize_t FileStore
::available() { - return m_header.size - m_header.memUsed; + return m_header.getSize() - m_header.getMemUsed(); } template @@ -499,7 +567,7 @@ void *FileStore
::alloc(typename Header::FsSize_t size) { ox_memset(inode, 0, size); inode->prev = ptr(firstInode())->prev; inode->next = retval + size; - m_header.memUsed += size; + m_header.setMemUsed(m_header.getMemUsed() + size); ptr(firstInode())->prev = retval; return inode; } @@ -538,8 +606,8 @@ bool FileStore
::insert(Inode *root, Inode *insertValue) { root->right = ptr(insertValue); retval = true; } - } else if (m_header.rootInode == 0) { - m_header.rootInode = ptr(insertValue); + } else if (m_header.getRootInode() == 0) { + m_header.setRootInode(ptr(insertValue)); retval = true; } @@ -574,12 +642,12 @@ typename FileStore
::Inode *FileStore
::lastInode() { template uint16_t FileStore
::fsType() { - return m_header.fsType; + return m_header.getFsType(); }; template uint16_t FileStore
::version() { - return m_header.version; + return m_header.getVersion(); }; template @@ -587,11 +655,11 @@ uint8_t *FileStore
::format(uint8_t *buffer, typename Header::FsSize_t si ox_memset(buffer, 0, size); auto *fs = (FileStore*) buffer; - fs->m_header.fsType = fsType; - fs->m_header.version = Header::VERSION; - fs->m_header.size = size; - fs->m_header.memUsed = sizeof(FileStore
) + sizeof(Inode); - fs->m_header.rootInode = sizeof(FileStore
); + fs->m_header.setFsType(fsType); + fs->m_header.setVersion(Header::VERSION); + fs->m_header.setSize(size); + fs->m_header.setMemUsed(sizeof(FileStore
) + sizeof(Inode)); + fs->m_header.setRootInode(sizeof(FileStore
)); ((Inode*) (fs + 1))->prev = sizeof(FileStore
); fs->lastInode()->next = sizeof(FileStore
);