bit_blast: update cxx_enums

This commit is contained in:
light7734 2025-08-31 21:48:37 +03:30
parent d93e0b3c69
commit 6ca8ec148e
Signed by: light7734
GPG key ID: 8C30176798F1A6BA
8 changed files with 2056 additions and 921 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 69 KiB

View file

@ -0,0 +1,63 @@
< INSERT VIDEO DESCRIPTION >
*//=======================[ Code Snippets ]=======================//*
_Unscoped Declaration_: https://godbolt.org/z/9MosoovPP
_Scoped Declaration_: https://godbolt.org/z/oT5TbP6vx
_Anonymous Declaration_: https://godbolt.org/z/s97n5jETs
_Scoped vs Unscoped_: https://godbolt.org/z/h65cjMEhb
_Explicit Underlying Type_: https://godbolt.org/z/ehY7Gns6E
_Default Case_: https://godbolt.org/z/a6KWE8b4c
_Utilize Zero_: https://godbolt.org/z/fvE6z9jMf
_Utilize Counting_: https://godbolt.org/z/5EEhYrcr9
_Using Enum Syntax_: https://godbolt.org/z/shaE6Yc64
_Bitfield Operators_: https://godbolt.org/z/acMW45K9o
_Standard Utilities_: https://godbolt.org/z/9xKcxEsP5
*//============================[ Sources ]============================//*
_cppreference_: https://en.cppreference.com/w/cpp/language/enum.html
Proposal Papers:
_N2347 — Strongly Typed Enums_: https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf
_N3815 — Enumerator List Property Queries_:https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3815.html
_N4196 — Attributes for namespaces and enumerators_: https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4196.html
_P0138R2 — Construction Rules for enum class Values_: https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0138r2.pdf
_P1682R3 — std::to_underlying for enumerations_: https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p1682r3.html
_P1099R5 — Using Enum_: https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1099r2.html
*//========================[ Forge & Mirrors ]========================//*
_Forge_: https://forge.light7734.com/light7734 | https://git.light7734.com/light7734
_Github Mirrors: https://github.com/light7734
_Gitlab Mirrors: https://gitlab.com/light7734
_Codeberg Mirrors: https://codeberg.org/light7734
*//============================[ Socials ]============================//*
**Matrix Community**: https://matrix.to/#/#hELL:matrix.org
**Discord Community**: https://discord.gg/N3AJJG2tGF
**Matrix**: @light7734:matrix.org
**Discord**: @light7734
**Mail**: mail@light7734.com
**YouTube**: https://www.youtube.com/@light.7734
**XTwitter**: https://x.com/light7734
**BlueSky**: https://bsky.app/profile/light7734.bsky.social
**Reddit** (currently suspended...): https://www.reddit.com/user/Light7734/
**Steam** (don't judge me): https://steamcommunity.com/id/light7734/
**Itch.io**: https://light7734.itch.io/
*//========================[ Software I Use ]========================//*
_OS_: Arch Linux x86-64
_Shell_: Zsh
_DE/WM_: Gnome/XMonad
_Terminal_: Kitty
_Colorscheme_: Gruvbox
_Font_: JetbrainsMono Nerd Font
_Code Editor_: Neovim
_Image Editor_: GIMP
_Video Editor_: Kdenlive
_3D Art_: Blender
_Pixel Art_: Aseprite
_Digial Art_: Krita
_Vector Art_: Inkscape
_DAW_: FL Studio 24 (on Windows, with support of flchan ofc)

File diff suppressed because it is too large Load diff

View file

@ -1,4 +1,8 @@
# Hook
---
title: BitBlast | The Cooked State of Enums
---
# Hook <20s
"There should be one, and preferably only one, obvious way to do it." --- The Zen of Python
A principle which C++ defies in many fronts, enums being one of them,
assuming you know the basics, let's learn more about enums!
@ -17,8 +21,8 @@ There are mainly 3 ways we could declare one.
3: The anonymous enum
-> Much like the classic enum, but without a qualifier
-> It was used as a way of storing constants before constexprs were a thing
-> There's a neat trick you coud do with anonymous or unscoped enums, and that is to put it inside a namespace and have the middle-ground of scoped and unscoped enums
-> It was used as a way of storing constants
-> But there's also a neat trick you could do with anonymous or unscoped enums, and that is to put it inside a namespace and have the middle-ground of scoped and unscoped enums
-> It allows implicit conversion to integer types.
-> But, it still requires proper qualification when accessing its elements. And won't pollute the enclosing namespace.
@ -41,10 +45,10 @@ Like this! always do this, even if the type is int--- It serves as documentation
3: Avoid the "default" Case
This may be too much in certain cases, but try to develop a preference for explicitly handling all enums values.
Even if multiple values execute the same code, you could fall-through them if you don't put breaks in-between.
You could enable warnings as errors for catching incomplete switch statements.
You could enable warnings as errors for catching incomplete statements.
So when you inevitably add new values to your enums, the compiler will have your back.
4: Utilize [Dio: ZERO]
4: Utilize Zero
Since zero evaluates to false, and other values to true, you could treat it as a special value for making a binary decision.
For example, in Vulkan API, the VkResult has 0 for success, and errors are set to non-zero values.
This makes the decision to handle-error or move-on a binary decision like this.
@ -52,11 +56,18 @@ This makes the decision to handle-error or move-on a binary decision like this.
5: Utilize Its Counting Nature
The values are implicitly incremented, this means you could have a "count" element at the end like so.
6: (Are you using it as a) Bitfield? (Then consider) Overload(ing) the Bitwise Operators.
6: Using enum
Remember how namespaced anonymous or unscoped enums enforced explicit qualification, yet allowed implicit conversion?
We could have it the other way around with the using enum syntax.
This way explicit qualification is not required, but implicit conversion is still prohibited.
7: (Are you using it as a) Bitfield? (Then consider) Overload(ing) the Bitwise Operators.
8: Std Utilities
And to wrap it up.. here are some enum utilities from the standard library...
Now, the best way to learn is to experiment,
You can find compiler explorer links for all the code you've seen in this video in the description.
If you want more of this type of content in your homepage, consider subscribing. Chao! ^~^
# Zoom out to outro...
Anyways! Here are some enum utilities from the standard library...
If you want more of these kind of videos, consider subscribing.
chao ^~^!

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB