CAD97 / CAD97/pointer-utils

FatErasedPtr

Ouverte
#84 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
Rust
Étoiles
137
Forks
15
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

I had just fun: Type erased pointers that Drop properly:

```
pub struct FatErasedPtr {
ptr: ErasedPtr,
dropfn: fn(ErasedPtr),
}

impl From

for FatErasedPtr {
#[inline(always)]
fn from(this: P) -> Self {
fn dropfn (this: ErasedPtr) {
unsafe {

::unerase(this) };
}

FatErasedPtr {
ptr: P::erase(this),
dropfn: dropfn::

,
}
}
}

impl Drop for FatErasedPtr {
fn drop(&mut self) {
(self.dropfn)(self.ptr)
}
}

#[test]
fn faterasedptr() {
use alloc::rc::Rc;
let rc: Rc = Rc::new(123);

let fat_erased: FatErasedPtr = FatErasedPtr::from(rc);

assert_eq!(core::mem::size_of_val(&fat_erased), core::mem::size_of::()*2);
}
```

Was just a curious experiment here. I can complete that and send a PR if this is interesting.

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Piste de recherche

Commencez par examiner les API existantes de ErasablePtr et ErasedPtr, puis comparez l’implémentation proposée de FatErasedPtr et son test faterasedptr avec les utilitaires de pointeurs actuels du crate. Confirmez que l’expérience s’intègre au projet et définissez des critères d’acceptation concernant la destruction correcte et le comportement de taille démontré avant de proposer un PR.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
rust
Domaine
tooling
Type d'issue
Fonctionnalité
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
30/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.