Do not inline constants in documentation
This commit is contained in:
@@ -27,6 +27,11 @@ type WORD = u32;
|
|||||||
/// Currently, the store only supports storages where a word is 4 bytes.
|
/// Currently, the store only supports storages where a word is 4 bytes.
|
||||||
const WORD_SIZE: usize = core::mem::size_of::<WORD>();
|
const WORD_SIZE: usize = core::mem::size_of::<WORD>();
|
||||||
|
|
||||||
|
/// Minimum number of words per page.
|
||||||
|
///
|
||||||
|
/// Currently, the store only supports storages where pages have at least 8 words.
|
||||||
|
const MIN_NUM_WORDS_PER_PAGE: usize = 8;
|
||||||
|
|
||||||
/// Maximum size of a page in bytes.
|
/// Maximum size of a page in bytes.
|
||||||
///
|
///
|
||||||
/// Currently, the store only supports storages where pages are between 8 and 1024 [words].
|
/// Currently, the store only supports storages where pages are between 8 and 1024 [words].
|
||||||
@@ -40,6 +45,11 @@ const MAX_PAGE_SIZE: usize = 4096;
|
|||||||
/// bits.
|
/// bits.
|
||||||
const MAX_ERASE_CYCLE: usize = 65535;
|
const MAX_ERASE_CYCLE: usize = 65535;
|
||||||
|
|
||||||
|
/// Minimum number of pages.
|
||||||
|
///
|
||||||
|
/// Currently, the store only supports storages with at least 3 pages.
|
||||||
|
const MIN_NUM_PAGES: usize = 3;
|
||||||
|
|
||||||
/// Maximum page index.
|
/// Maximum page index.
|
||||||
///
|
///
|
||||||
/// Thus the maximum number of pages is one more than this number. Currently, the store only
|
/// Thus the maximum number of pages is one more than this number. Currently, the store only
|
||||||
@@ -117,16 +127,19 @@ impl Format {
|
|||||||
/// Returns whether a storage is supported.
|
/// Returns whether a storage is supported.
|
||||||
///
|
///
|
||||||
/// A storage is supported if the following conditions hold:
|
/// A storage is supported if the following conditions hold:
|
||||||
/// - The size of a word is 4 bytes.
|
/// - The size of a word is [`WORD_SIZE`] bytes.
|
||||||
/// - The size of a word evenly divides the size of a page.
|
/// - The size of a word evenly divides the size of a page.
|
||||||
/// - A page contains at least 8 words.
|
/// - A page contains at least [`MIN_NUM_WORDS_PER_PAGE`] words.
|
||||||
/// - A page contains at most [`MAX_PAGE_SIZE`] bytes.
|
/// - A page contains at most [`MAX_PAGE_SIZE`] bytes.
|
||||||
/// - There are at least 3 pages.
|
/// - There are at least [`MIN_NUM_PAGES`] pages.
|
||||||
/// - There are at most [`MAX_PAGE_INDEX`]` + 1` pages.
|
/// - There are at most [`MAX_PAGE_INDEX`]` + 1` pages.
|
||||||
/// - A word can be written at least twice between erase cycles.
|
/// - A word can be written at least twice between erase cycles.
|
||||||
/// - The maximum number of erase cycles is at most [`MAX_ERASE_CYCLE`].
|
/// - The maximum number of erase cycles is at most [`MAX_ERASE_CYCLE`].
|
||||||
///
|
///
|
||||||
|
/// [`WORD_SIZE`]: constant.WORD_SIZE.html
|
||||||
|
/// [`MIN_NUM_WORDS_PER_PAGE`]: constant.MIN_NUM_WORDS_PER_PAGE.html
|
||||||
/// [`MAX_PAGE_SIZE`]: constant.MAX_PAGE_SIZE.html
|
/// [`MAX_PAGE_SIZE`]: constant.MAX_PAGE_SIZE.html
|
||||||
|
/// [`MIN_NUM_PAGES`]: constant.MIN_NUM_PAGES.html
|
||||||
/// [`MAX_PAGE_INDEX`]: constant.MAX_PAGE_INDEX.html
|
/// [`MAX_PAGE_INDEX`]: constant.MAX_PAGE_INDEX.html
|
||||||
/// [`MAX_ERASE_CYCLE`]: constant.MAX_ERASE_CYCLE.html
|
/// [`MAX_ERASE_CYCLE`]: constant.MAX_ERASE_CYCLE.html
|
||||||
fn is_storage_supported<S: Storage>(storage: &S) -> bool {
|
fn is_storage_supported<S: Storage>(storage: &S) -> bool {
|
||||||
@@ -135,10 +148,10 @@ impl Format {
|
|||||||
let num_pages = storage.num_pages();
|
let num_pages = storage.num_pages();
|
||||||
let max_word_writes = storage.max_word_writes();
|
let max_word_writes = storage.max_word_writes();
|
||||||
let max_page_erases = storage.max_page_erases();
|
let max_page_erases = storage.max_page_erases();
|
||||||
word_size == 4
|
word_size == WORD_SIZE
|
||||||
&& page_size % word_size == 0
|
&& page_size % word_size == 0
|
||||||
&& (8 * word_size <= page_size && page_size <= MAX_PAGE_SIZE)
|
&& (MIN_NUM_WORDS_PER_PAGE * word_size <= page_size && page_size <= MAX_PAGE_SIZE)
|
||||||
&& (3 <= num_pages && num_pages <= MAX_PAGE_INDEX + 1)
|
&& (MIN_NUM_PAGES <= num_pages && num_pages <= MAX_PAGE_INDEX + 1)
|
||||||
&& max_word_writes >= 2
|
&& max_word_writes >= 2
|
||||||
&& max_page_erases <= MAX_ERASE_CYCLE
|
&& max_page_erases <= MAX_ERASE_CYCLE
|
||||||
}
|
}
|
||||||
@@ -150,14 +163,14 @@ impl Format {
|
|||||||
|
|
||||||
/// The size of a page in bytes.
|
/// The size of a page in bytes.
|
||||||
///
|
///
|
||||||
/// We have `32 <= self.page_size() <= MAX_PAGE_SIZE` assuming a word is 4 bytes.
|
/// We have `MIN_NUM_WORDS_PER_PAGE * self.word_size() <= self.page_size() <= MAX_PAGE_SIZE`.
|
||||||
pub fn page_size(&self) -> usize {
|
pub fn page_size(&self) -> usize {
|
||||||
self.page_size
|
self.page_size
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The number of pages in the storage, denoted by `N`.
|
/// The number of pages in the storage, denoted by `N`.
|
||||||
///
|
///
|
||||||
/// We have `3 <= N <= MAX_PAGE_INDEX + 1`.
|
/// We have `MIN_NUM_PAGES <= N <= MAX_PAGE_INDEX + 1`.
|
||||||
pub fn num_pages(&self) -> usize {
|
pub fn num_pages(&self) -> usize {
|
||||||
self.num_pages
|
self.num_pages
|
||||||
}
|
}
|
||||||
@@ -190,14 +203,15 @@ impl Format {
|
|||||||
///
|
///
|
||||||
/// A virtual page is stored in a physical page after the page header.
|
/// A virtual page is stored in a physical page after the page header.
|
||||||
///
|
///
|
||||||
/// We have `6 <= Q <= MAX_VIRT_PAGE_SIZE`.
|
/// We have `MIN_NUM_WORDS_PER_PAGE - 2 <= Q <= MAX_VIRT_PAGE_SIZE`.
|
||||||
pub fn virt_page_size(&self) -> usize {
|
pub fn virt_page_size(&self) -> usize {
|
||||||
self.page_size() / self.word_size() - CONTENT_WORD
|
self.page_size() / self.word_size() - CONTENT_WORD
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The maximum length in bytes of a user payload.
|
/// The maximum length in bytes of a user payload.
|
||||||
///
|
///
|
||||||
/// We have `20 <= self.max_value_len() <= MAX_VALUE_LEN` assuming words are 4 bytes.
|
/// We have `(MIN_NUM_WORDS_PER_PAGE - 3) * self.word_size() <= self.max_value_len() <=
|
||||||
|
/// MAX_VALUE_LEN`.
|
||||||
pub fn max_value_len(&self) -> usize {
|
pub fn max_value_len(&self) -> usize {
|
||||||
min(
|
min(
|
||||||
(self.virt_page_size() - 1) * self.word_size(),
|
(self.virt_page_size() - 1) * self.word_size(),
|
||||||
@@ -210,7 +224,7 @@ impl Format {
|
|||||||
/// A prefix is the first words of a virtual page that belong to the last entry of the previous
|
/// A prefix is the first words of a virtual page that belong to the last entry of the previous
|
||||||
/// virtual page. This happens because entries may overlap up to 2 virtual pages.
|
/// virtual page. This happens because entries may overlap up to 2 virtual pages.
|
||||||
///
|
///
|
||||||
/// We have `5 <= M < Q`.
|
/// We have `MIN_NUM_WORDS_PER_PAGE - 3 <= M < Q`.
|
||||||
pub fn max_prefix_len(&self) -> usize {
|
pub fn max_prefix_len(&self) -> usize {
|
||||||
self.bytes_to_words(self.max_value_len())
|
self.bytes_to_words(self.max_value_len())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user