diff options
author | Wohlstand <admin@wohlnet.ru> | 2019-07-02 19:49:43 +0300 |
---|---|---|
committer | Wohlstand <admin@wohlnet.ru> | 2019-07-02 19:49:43 +0300 |
commit | bf9255e78e18675ab5ac3f4aa03fa55ebce92920 (patch) | |
tree | 4e3fbc8f8354bae2bf62e7891f1dbe8518d0aa84 /utils/gen_adldata/progs_cache.h | |
parent | a41963a48cfab8cfc5e949e4ff5628f0bf9aedba (diff) | |
download | libADLMIDI-bf9255e78e18675ab5ac3f4aa03fa55ebce92920.tar.gz libADLMIDI-bf9255e78e18675ab5ac3f4aa03fa55ebce92920.tar.bz2 libADLMIDI-bf9255e78e18675ab5ac3f4aa03fa55ebce92920.zip |
Some work on old cache
Diffstat (limited to 'utils/gen_adldata/progs_cache.h')
-rw-r--r-- | utils/gen_adldata/progs_cache.h | 46 |
1 files changed, 43 insertions, 3 deletions
diff --git a/utils/gen_adldata/progs_cache.h b/utils/gen_adldata/progs_cache.h index 239187b..0f25a5d 100644 --- a/utils/gen_adldata/progs_cache.h +++ b/utils/gen_adldata/progs_cache.h @@ -22,6 +22,18 @@ struct insdata uint8_t data[11]; int8_t finetune; bool diff; + explicit insdata() + { + std::memset(data, 0, 11); + finetune = 0; + diff = false; + } + insdata(const insdata &b) + { + std::memcpy(data, b.data, 11); + finetune = b.finetune; + diff = b.diff; + } bool operator==(const insdata &b) const { return (std::memcmp(data, b.data, 11) == 0) && (finetune == b.finetune) && (diff == b.diff); @@ -46,9 +58,9 @@ struct insdata inline bool equal_approx(double const a, double const b) { - double const epsilon(std::numeric_limits<double>::epsilon() * 100); - double const scale(1.0); - return std::fabs(a - b) < epsilon * (scale + (std::max)(std::fabs(a), std::fabs(b))); + int_fast64_t ai = static_cast<int_fast64_t>(a * 1000000.0); + int_fast64_t bi = static_cast<int_fast64_t>(b * 1000000.0); + return ai == bi; } struct ins @@ -59,18 +71,44 @@ struct ins Flag_RM_Cymbal = 0x20, Flag_RM_HiHat = 0x28, Mask_RhythmMode = 0x38 }; size_t insno1, insno2; + insdata instCache1, instCache2; unsigned char notenum; bool pseudo4op; bool real4op; uint32_t rhythmModeDrum; double voice2_fine_tune; int8_t midi_velocity_offset; + explicit ins() : + insno1(0), + insno2(0), + notenum(0), + pseudo4op(false), + real4op(false), + rhythmModeDrum(false), + voice2_fine_tune(0.0), + midi_velocity_offset(0) + {} + + ins(const ins &o) : + insno1(o.insno1), + insno2(o.insno2), + instCache1(o.instCache1), + instCache2(o.instCache2), + notenum(o.notenum), + pseudo4op(o.pseudo4op), + real4op(o.real4op), + rhythmModeDrum(o.rhythmModeDrum), + voice2_fine_tune(o.voice2_fine_tune), + midi_velocity_offset(o.midi_velocity_offset) + {} bool operator==(const ins &b) const { return notenum == b.notenum && insno1 == b.insno1 && insno2 == b.insno2 + && instCache1 == b.instCache2 + && instCache2 == b.instCache2 && pseudo4op == b.pseudo4op && real4op == b.real4op && rhythmModeDrum == b.rhythmModeDrum @@ -81,6 +119,8 @@ struct ins { if(insno1 != b.insno1) return insno1 < b.insno1; if(insno2 != b.insno2) return insno2 < b.insno2; + if(instCache1 != b.instCache1) return instCache1 < b.instCache1; + if(instCache2 != b.instCache2) return instCache2 < b.instCache2; if(notenum != b.notenum) return notenum < b.notenum; if(pseudo4op != b.pseudo4op) return pseudo4op < b.pseudo4op; if(real4op != b.real4op) return real4op < b.real4op; |