I still can't see any advantage over simply using the standard way Arduino proposes.
The standard functions are slower.
There is a very good reason that the Arduino "standard" functions digitalRead, digitalWrite and pinMode are slower than direct port manipulation: They take a variable as the pin number and value to set it to.
This means that the functions in question then have to do a table lookup to translate the pin number to a port number and a bit position. The advantage is you can write code like this:
for (int i = 0; i < 20; i++)
{
pinMode (i, OUTPUT);
digitalWrite (i, LOW);
}
That's quite handy!
However if you have timing-critical code, and you happen to know the pin number in advance, and it won't change, then you can use a library digitalWriteFast which can optimize that for you. The library cleverly detects if a particular call is given a variable or constant. If a constant then it does the faster port manipulation method (this can now be done at compile-time to find the port and bit number).
There seem to be a few different versions of this library around. The one I linked above fails if you don't pass a constant, others fall back to just doing a digitalWrite (etc).
Inside the library there is code like this:
if (__builtin_constant_p(P) && __builtin_constant_p(V)) { \
In other words it uses a compiler directive to detect if the argument (P = pin, and V = value) are constants or not.
You can also, of course, do direct port manipulation but be warned that if you do then your code becomes pretty non-portable. Try going from an Atmega328 to an Atmega16U4 and the ports and bit positions will change.
Another library: https://code.google.com/archive/p/digitalwritefast/downloads