The Pedigree Project 0.1
QuotaTable.h
1/* Copyright (c) 2026, Pedigree Developers. */
2#ifndef PEDIGREE_VFS_QUOTATABLE_H
3#define PEDIGREE_VFS_QUOTATABLE_H
4
5#include "pedigree/kernel/utilities/Vector.h"
6
7#include "Quota.h"
8
10class EXPORTED_PUBLIC QuotaTable {
11 public:
12 struct Entry {
13 uint32_t id = 0;
14 QuotaRecord record;
15 bool dirty = false;
16 };
17
18 Entry* find(uint32_t id);
19 const Entry* find(uint32_t id) const;
20 Entry* prepare(uint32_t id);
21 QuotaStatus set(uint32_t id, const QuotaRecord& requested);
22 static QuotaStatus canCharge(const Entry&, uint64_t bytes, uint64_t inodes, bool enforce);
23 static void charge(Entry&, uint64_t bytes, uint64_t inodes);
24 static void refund(Entry&, uint64_t bytes, uint64_t inodes);
25 static bool sameRecord(const QuotaRecord&, const QuotaRecord&);
26 void clear();
27 void swap(QuotaTable& other);
28 Vector<Entry>& entries() {
29 return m_Entries;
30 }
31 const Vector<Entry>& entries() const {
32 return m_Entries;
33 }
34
35 private:
36 size_t position(uint32_t id) const;
37 Vector<Entry> m_Entries;
38};
39
41namespace QuotaOld {
42constexpr size_t RecordSize = 32;
43QuotaStatus EXPORTED_PUBLIC decode(const void* bytes, size_t length, QuotaRecord& record);
44QuotaStatus EXPORTED_PUBLIC encode(const QuotaRecord& record, void* bytes, size_t length);
45bool EXPORTED_PUBLIC looksLikeNewFormat(const void* bytes, size_t length);
46} // namespace QuotaOld
47
48#endif
A vector / dynamic array.
Definition Vector.h:33