we-can-has-dasilb

Sometimes technical debt gets paid off.

Documentation. So much documentation. And tutorials.
C-integration tutorials, C++ integration tutorials, Language tutorials, and even Macros tutorials.

Its in the GIT already. It’ll be on the website shortly too.
Its so awesome, it almost makes me cry. Almost.

First 90% were easy. Second 90% we kind of hard. The remaining 90% took even longer.
I can’t wait to finish another 90%. It takes years to realize, how amazing MSDN documentation is.

But wait, it gets better. Daslib is maturing. Little missing bits are adding up.
A lot a bugfixes - but most are features.
They are all documented. Many are in the tutorials too.

Let me go through some of them.


interfaces

This one got a lot more useful.

1
2
3
4
Interface inheritance: [interface] class IChild : IParent
— ancestor getters auto-generated for is/as/?as
Default method implementations — non-abstract methods inherited by proxy
Completeness checking — compile error on missing abstract methods

regex & regex_boost

It’s still no PRCE. It’s still very naive. But it just got a lot closer.
Still no lookbehind though.

1
2
3
4
5
6
7
8
9
10
11
12
Counted repetitions: {n}, {n,}, {n,m}
Anchors/boundaries: ^ (BOS), \b, \B
Non-capturing groups: (?:...), named groups: (?P<name>...)
Lazy quantifiers: *?, +?, ??, {n,m}?
Lookahead: (?=...) / (?!...)
Case-insensitive + dot-all mode flags

regex_search, regex_split, regex_match_all, regex_group_by_name
regex_replace with template strings ($0, $1, ${name})
operator [] for group access by index or name

Reader macro flag suffix: %regex~pattern~flags%% (i = case-insensitive, s = dotAll)

json

1
Proper \uXXXX Unicode escape → UTF-8 encoding

strings_boost

1
2
3
4
contains(str, sub), count(str, sub), last_index_of(str, sub)
pad_right / pad_left (with optional fill char)
trim_prefix / trim_suffix
capitalize, is_null_or_whitespace

decs

This one gonna get a lot more love soon. Like batch object creation.

1
2
3
is_alive(eid) — check entity is alive (generation matches)
entity_count() — total alive entity count across archetypes
get_component(eid, name, defval) — named component by value with fallback

algorithm

1
2
upper_bound, equal_range — binary search family (with/without comparator)
fill, is_sorted, rotate, min_element, max_element

functional

1
2
3
4
reduce_or_default, fold, scan — reduction/accumulation family
enumerate, for_each, find, find_index, partition
tap, iterate, chain, pairwise, flat_map
repeat now infinite by default; echo is non-destructive

linq

1
2
3
4
order_descending / order_descending_inplace / order_descending_to_array
count(iter, predicate) — count matching elements
skip_last / take_last (4 variants each)
zip / zip_to_array with 3 sources

jobque_boost

1
2
3
4
5
try_pop, try_pop_clone — non-blocking channel pop
pop_with_timeout, pop_with_timeout_clone — timed channel pop
with_wait_group — auto-join wait group pattern
done(status) — alias for notify_and_release
parallel_for, parallel_for_each, parallel_map — automatic job partitioning macros

bitfield_trait / bitfield_boost

1
2
each / each_bit_name now support bitfield8, bitfield16, bitfield64 (not just bitfield)
each renamed to each_bit in bitfield_boost, returns iterator<bool>

Soon it will all be unleashed on the unsuspected world in form of 0.6 release.
Like with downloads, binaries built, modules built against the release, the whole 9 yards.