Skip to content
/ duple Public

proof of concept library with methods generic over the tuple length

Notifications You must be signed in to change notification settings

micouy/duple

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 

Repository files navigation

duple

proof of concept library that adds methods to remove tuple fields that are generic over tuple length • this allows to keep the code length O(n), where n is the tuple length, without using macros, instead of O(n^2) (that would be the case if each method had to be implemented for each tuple length) • it should be possible to also add popping from and pushing onto both ends of the tuple as well as removing nth element from the end • operations on the right end of the tuple requires wrapping the tuples from the left, i.e. ((((), a), b), c)

all of the methods follow the same pattern: they take a type implementing TupleWrap with the Wrapped associated type of desired 'depth' • calling TupleWrap::wrap on a 'flat' tuple returns a corresponding nested tuple, i.e. (a, b, c) is turned into (a, (b, (c, ()))) • then, a function generic over the 'tail' of the nested tuple removes the nth level • a nested tuple with the nth level removed is then unwrapped into a corresponding 'flat' tuple

use duple::prelude::*;

// Special case — returns the last element, not a tuple!
assert_eq!(('a', 'b').rem0(), 'b');
assert_eq!(('a', 'b').rem1(), 'a');

assert_eq!(('a', 'b', 'c').rem0(), ('b', 'c'));
assert_eq!(('a', 'b', 'c').rem1(), ('a', 'c'));
assert_eq!(('a', 'b', 'c').rem2(), ('a', 'b'));

About

proof of concept library with methods generic over the tuple length

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages