Skip to content

lu-zero/cow_struct

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

derive CowStruct

This crate consists in a procedural macro derive that provides a struct that is Cow and the impl to create one from the target struct.

Usage

    use cow_struct::CowStruct;

    #[derive(Debug, Default, CowStruct)]
    struct A {
        a: LargeStruct,
        b: OtherLargeStruct,
        c: AnotherOne,
        ...
        z: YetAnother,
    }

    fn evaluation(cfg: &Config, state: &mut CowA) -> usize { ... }

    fn foo() {
        // original struct
        let a = A::new();

        let mut val = 0;
        // similar struct, with all the fields set as Cow::Borrowed from a;
        let mut cow = a.to_cow();
        let mut cow_out = cow.to_cow();
        let mut v_max = usize::min();
        for cfg in inputs() {
            // it is going to change cow, a remains untouched
            let val = evaluation(cfg, &mut cow);

            // let's pick the best candidate
            for candidate in candidates_b(val) {
                let mut cow2 = cow.to_cow();
                let v = evaluation_b(candidate, &mut cow2);
                if v > v_max {
                    v_max = v;
                    cow_out = cow2;
                }
            }
        }
    }

About

Derive per-field Cow Structures

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages