mirror of https://github.com/bsnes-emu/bsnes.git
Update to bsnes v060r07 release.
Feeling amazing tonight. The low of fighting a bad cold for the past week, blocked nose, bloody lips and wrist pain combined can't hold me down. Two years of searching and I finally found the Midnight Panic EP, and it's amazing. And from this WIP forward, bsnes now uses C++0x instead of C++03. I feel like I've been given this new amazing language, and there's all these wonderful new possibilities for cleaning up and simplifying code. foreach is the most amazing concept. The only reason I've made it this long without it is because I never got to use it. You will pry this one from my cold, dead hands. Already applied it to the cartridge and memory classes. It's insane. Before: for(unsigned i = 0; i < memory::wram.size(); i++) memory::wram[i] = config.cpu.wram_init_value; for(unsigned i = 0; i < cartridge.mapping.size(); i++) { Cartridge::Mapping &m = cartridge.mapping[i]; After: foreach(n, memory::wram) n = config.cpu.wram_init_value; foreach(m, cartridge.mapping) { Before: for(unsigned i = 0; i < 32; i++) { char value[4]; sprintf(value, "%.2x", shahash[i]); strcat(hash, value); } After: foreach(n, shahash) hash << string::printf("%.2x", n); And that's just the first thing! So many things I can do now. Can't wait to come up with uses for all the new features to simplify code even more. - auto type inheritance - variadic templates to nuke the last vestiges of va_list and its associated horrors - strongly typed enums (no more enum Mode { ModeOfRedundancyMode } shit. enum class Mode : unsigned { Normal, BSX }; - _real_ static assertions with actual error messages instead of 40 pages of template errors - default templates parameters to template functions (but still no function partial template specialization, grrr) - property class can be implemented natively without having to trick GCC into using template friend classes - rvalue references will allow my string class and such to implement move semantics, no more useless copying - uniform list initializers, lstring foo = { "a", "b", "c", ... }; And that's just what's there now, it's only half-way done. The completed support will be even more awesome: - lambda functions - nullptr - class variable initialization in the header instead of needing constructors - native functors to replace nall::function with - string literals in UTF-8 - native multi-threading support - and so much more [No archive available]
This commit is contained in:
parent
e1c8757a10
commit
1934197fb7