diff --git a/src/JsonUtil.h b/src/JsonUtil.h index 87942336e0..0d6c7821aa 100644 --- a/src/JsonUtil.h +++ b/src/JsonUtil.h @@ -149,6 +149,19 @@ namespace JsonUtil fn(*v[i], root[i]); } } + + template + static void DeserializeVectorPointers(vector &v, void fn(T *, const Json::Value &), const Json::Value &root) + { + for(unsigned i=0; i static void DeserializeArrayValues(vector &v, const Json::Value &root) diff --git a/src/NotesLoaderJson.cpp b/src/NotesLoaderJson.cpp index d113e2105c..6865120fbc 100644 --- a/src/NotesLoaderJson.cpp +++ b/src/NotesLoaderJson.cpp @@ -15,16 +15,26 @@ void NotesLoaderJson::GetApplicableFiles( const RString &sPath, vector GetDirListing( sPath + RString("*.json"), out ); } -static void Deserialize(TimingSegment &seg, const Json::Value &root) +static void Deserialize(TimingSegment &seg_, const Json::Value &root) { - seg.SetBeat((float)(root["Beat"].asDouble())); - if (seg.GetType() == SEGMENT_BPM) + TimingSegment *seg = &seg_; + + float fBeat = root["Beat"].asDouble(); + seg->SetBeat(fBeat); + switch (seg->GetType()) { - static_cast(seg).SetBPM((float)(root["BPM"].asDouble())); - } - else - { - static_cast(seg).SetPause((float)(root["Seconds"].asDouble())); + case SEGMENT_BPM: + { + float fBPM = root["BPM"].asDouble(); + static_cast(seg)->SetBPM(fBPM); + break; + } + case SEGMENT_STOP_DELAY: + { + float fStop = root["Seconds"].asDouble(); + static_cast(seg)->SetPause(fStop); + break; + } } }