-
Notifications
You must be signed in to change notification settings - Fork 5.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Cast Vec
to StorageVec
#2439
Comments
|
This is what I had in mind initially as I see developers needing to do this often. The only problem being that this could get quite expensive. I bring this up as I have a need for this in my English Auction application. I have a |
Yeah this is going to be expensive. Now two things:
|
The fact that it will be very expensive is pointing toward this not being used often. |
Bumping this issue, as we have some possible use cases while updating the While the utility of sorting algorithm implementations for storage vectors are limited, it would be good to match API's between the memory and storage vectors. However, any algorithm that requires more than This may be useful for the following:
(for more on the splits, see discussion here) |
## Description Currently, `StorageVec` and `Vec` do not have any relation with one another. This PR takes advantage of the recent optimization and refactoring done to the Storage API `read()` and `write()` functions in #4795 and enables the storing of a `Vec` using the `StorageVec` type. To do this, the `StorageVec` now stores things sequentially rather than a different key for every element. Due to the optimizations done to the Storage API, this has become feasible as we can now load a single element of the sequential `StorageVec`. The storing of elements sequentially mimics the existing `Vec`, allowing us to store it as a `raw_slice` with a ***single*** read/write to storage as opposed to looping over the `Vec` and having ***n*** read/writes. It should be noted that due to #409, the storing of a `Vec` is written in the `StorageVec` file. This is the resulting syntax: ```sway let my_vec = Vec::new(); storage.storage_vec.store_vec(my_vec); // Store the Vec let other_vec = storage.storage_vec.load_vec(); // Read the Vec ``` When this issue is resolved, this should be changed to a `From` implementation changing the syntax to: ```sway let my_vec = Vec::new(); storage.storage_vec = my_vec.into(); // Store the Vec let other_vec = Vec::from(storage.storage_vec); // Read the Vec ``` Closes #2439 ## Checklist - [x] I have linked to any relevant issues. - [x] I have commented my code, particularly in hard-to-understand areas. - [ ] I have updated the documentation where relevant (API docs, the reference, and the Sway book). - [x] I have added tests that prove my fix is effective or that my feature works. - [x] I have added (or requested a maintainer to add) the necessary `Breaking*` or `New Feature` labels where relevant. - [x] I have done my best to ensure that my PR adheres to [the Fuel Labs Code Review Standards](https://github.com/FuelLabs/rfcs/blob/master/text/code-standards/external-contributors.md). - [x] I have requested a review from the relevant team or maintainers. --------- Co-authored-by: bitzoic <bitzoic.eth@gmail.com>
There is currently no relation between the
Vec
andStorageVec
in the standard library. There should be a way to cast aVec
to aStorageVec
and vice versa.An example where this is needed would be passing a
Vec
to a function and then storing the givenVec
. Or returning a storedStorageVec
as aVec
to the SDK.We should also consider the case of utility methods within
Vec
as described by #2014 and whether these should be duplicated inStorageVec
or the end user should cast back and forth to perform certain operations.The text was updated successfully, but these errors were encountered: