os: implement waitable management.
This implements waitable management for Events (and implements Events). It also refactors PM to use new Event/Waitable semantics, and also adds STS_ASSERT as a macro for asserting a boolean expression. The rest of stratosphere has been refactored to use STS_ASSERT whenever possible.
This commit is contained in:
@@ -90,9 +90,7 @@ namespace sts::kvdb {
|
||||
|
||||
Result ArchiveReader::ReadEntryCount(size_t *out) {
|
||||
/* This should only be called at the start of reading stream. */
|
||||
if (this->offset != 0) {
|
||||
std::abort();
|
||||
}
|
||||
STS_ASSERT(this->offset == 0);
|
||||
|
||||
/* Read and validate header. */
|
||||
ArchiveHeader header;
|
||||
@@ -105,9 +103,7 @@ namespace sts::kvdb {
|
||||
|
||||
Result ArchiveReader::GetEntrySize(size_t *out_key_size, size_t *out_value_size) {
|
||||
/* This should only be called after ReadEntryCount. */
|
||||
if (this->offset == 0) {
|
||||
std::abort();
|
||||
}
|
||||
STS_ASSERT(this->offset != 0);
|
||||
|
||||
/* Peek the next entry header. */
|
||||
ArchiveEntryHeader header;
|
||||
@@ -121,9 +117,7 @@ namespace sts::kvdb {
|
||||
|
||||
Result ArchiveReader::ReadEntry(void *out_key, size_t key_size, void *out_value, size_t value_size) {
|
||||
/* This should only be called after ReadEntryCount. */
|
||||
if (this->offset == 0) {
|
||||
std::abort();
|
||||
}
|
||||
STS_ASSERT(this->offset != 0);
|
||||
|
||||
/* Read the next entry header. */
|
||||
ArchiveEntryHeader header;
|
||||
@@ -131,9 +125,8 @@ namespace sts::kvdb {
|
||||
R_TRY(header.Validate());
|
||||
|
||||
/* Key size and Value size must be correct. */
|
||||
if (key_size != header.key_size || value_size != header.value_size) {
|
||||
std::abort();
|
||||
}
|
||||
STS_ASSERT(key_size == header.key_size);
|
||||
STS_ASSERT(value_size == header.value_size);
|
||||
|
||||
R_ASSERT(this->Read(out_key, key_size));
|
||||
R_ASSERT(this->Read(out_value, value_size));
|
||||
@@ -154,9 +147,7 @@ namespace sts::kvdb {
|
||||
|
||||
void ArchiveWriter::WriteHeader(size_t entry_count) {
|
||||
/* This should only be called at start of write. */
|
||||
if (this->offset != 0) {
|
||||
std::abort();
|
||||
}
|
||||
STS_ASSERT(this->offset == 0);
|
||||
|
||||
ArchiveHeader header = ArchiveHeader::Make(entry_count);
|
||||
R_ASSERT(this->Write(&header, sizeof(header)));
|
||||
@@ -164,9 +155,7 @@ namespace sts::kvdb {
|
||||
|
||||
void ArchiveWriter::WriteEntry(const void *key, size_t key_size, const void *value, size_t value_size) {
|
||||
/* This should only be called after writing header. */
|
||||
if (this->offset == 0) {
|
||||
std::abort();
|
||||
}
|
||||
STS_ASSERT(this->offset != 0);
|
||||
|
||||
ArchiveEntryHeader header = ArchiveEntryHeader::Make(key_size, value_size);
|
||||
R_ASSERT(this->Write(&header, sizeof(header)));
|
||||
|
||||
@@ -57,9 +57,7 @@ namespace sts::kvdb {
|
||||
this->backing_buffer_free_offset = 0;
|
||||
this->count = 0;
|
||||
this->entries = static_cast<decltype(this->entries)>(this->Allocate(sizeof(*this->entries) * this->capacity));
|
||||
if (this->entries == nullptr) {
|
||||
std::abort();
|
||||
}
|
||||
STS_ASSERT(this->entries != nullptr);
|
||||
}
|
||||
|
||||
std::optional<size_t> FileKeyValueStore::Cache::TryGet(void *out_value, size_t max_out_size, const void *key, size_t key_size) {
|
||||
@@ -106,9 +104,7 @@ namespace sts::kvdb {
|
||||
}
|
||||
|
||||
/* Ensure key size is small enough. */
|
||||
if (key_size > MaxKeySize) {
|
||||
std::abort();
|
||||
}
|
||||
STS_ASSERT(key_size <= MaxKeySize);
|
||||
|
||||
/* If we're at capacity, invalidate the cache. */
|
||||
if (this->count == this->capacity) {
|
||||
|
||||
Reference in New Issue
Block a user