XJ music engine  1.9.6
In-game runtime engine for XJ music.
ContentEntityStore.h
Go to the documentation of this file.
1 // Copyright (c) XJ Music Inc. (https://xjmusic.com) All Rights Reserved.
2 
3 #ifndef XJMUSIC_CONTENT_STORE_H
4 #define XJMUSIC_CONTENT_STORE_H
5 
6 #include <fstream>
7 #include <map>
8 #include <optional>
9 #include <set>
10 #include <vector>
11 
12 #include "Instrument.h"
13 #include "InstrumentAudio.h"
14 #include "InstrumentMeme.h"
15 #include "Library.h"
16 #include "Program.h"
17 #include "ProgramMeme.h"
18 #include "ProgramSequence.h"
19 #include "ProgramSequenceBinding.h"
21 #include "ProgramSequenceChord.h"
23 #include "ProgramSequencePattern.h"
25 #include "ProgramVoice.h"
26 #include "ProgramVoiceTrack.h"
27 #include "Project.h"
28 #include "Template.h"
29 #include "TemplateBinding.h"
30 
31 using namespace XJ;
32 
33 #define CONTENT_STORE_CORE_HEADERS(ENTITY, ENTITIES) \
34  std::optional<const ENTITY *> get##ENTITY(const UUID &id); \
35  std::set<const ENTITY *> get##ENTITIES(); \
36  ContentEntityStore set##ENTITIES(const std::set<ENTITY> &entities); \
37  ENTITY *put(const ENTITY &entity);
38 
39 namespace XJ {
40 
42  std::map<UUID, Instrument> instruments{};
43  std::map<UUID, InstrumentAudio> instrumentAudios{};
44  std::map<UUID, InstrumentMeme> instrumentMemes{};
45  std::map<UUID, Library> libraries{};
46  std::map<UUID, Program> programs{};
47  std::map<UUID, ProgramMeme> programMemes{};
48  std::map<UUID, ProgramSequence> programSequences{};
49  std::map<UUID, ProgramSequenceBinding> programSequenceBindings{};
50  std::map<UUID, ProgramSequenceBindingMeme> programSequenceBindingMemes{};
51  std::map<UUID, ProgramSequenceChord> programSequenceChords{};
52  std::map<UUID, ProgramSequenceChordVoicing> programSequenceChordVoicings{};
53  std::map<UUID, ProgramSequencePattern> programSequencePatterns{};
54  std::map<UUID, ProgramSequencePatternEvent> programSequencePatternEvents{};
55  std::map<UUID, ProgramVoice> programVoices{};
56  std::map<UUID, ProgramVoiceTrack> programVoiceTracks{};
57  std::map<UUID, Project> projects{};
58  std::map<UUID, Template> templates{};
59  std::map<UUID, TemplateBinding> templateBindings{};
60 
61  public:
63 
65 
67 
69 
71 
73 
75 
76  CONTENT_STORE_CORE_HEADERS(ProgramSequenceBinding, ProgramSequenceBindings)
77 
78  CONTENT_STORE_CORE_HEADERS(ProgramSequenceBindingMeme, ProgramSequenceBindingMemes)
79 
80  CONTENT_STORE_CORE_HEADERS(ProgramSequenceChord, ProgramSequenceChords)
81 
82  CONTENT_STORE_CORE_HEADERS(ProgramSequenceChordVoicing, ProgramSequenceChordVoicings)
83 
84  CONTENT_STORE_CORE_HEADERS(ProgramSequencePattern, ProgramSequencePatterns)
85 
86  CONTENT_STORE_CORE_HEADERS(ProgramSequencePatternEvent, ProgramSequencePatternEvents)
87 
89 
91 
93 
95 
97 
98 
99 
100  explicit ContentEntityStore();
101 
107  explicit ContentEntityStore(std::ifstream &input);
108 
114  explicit ContentEntityStore(std::string &input);
115 
120  std::optional<Project *> getProject();
121 
127  std::optional<const ProgramVoiceTrack *> getTrackOfEvent(const ProgramSequencePatternEvent *event);
128 
134  std::optional<const ProgramVoice *> getVoiceOfEvent(const ProgramSequencePatternEvent *event);
135 
142 
148  bool hasInstrumentsOfType(Instrument::Type type);
149 
155  bool hasInstrumentsOfMode(Instrument::Mode mode);
156 
163  bool hasInstrumentsOfTypeAndMode(Instrument::Type type, Instrument::Mode mode);
164 
170  std::vector<int> getAvailableOffsets(const ProgramSequenceBinding *sequenceBinding) const;
171 
177  std::set<const InstrumentAudio *> getAudiosOfInstrument(const UUID &id) const;
178 
184  std::set<const InstrumentAudio *> getAudiosOfInstrument(const Instrument *instrument) const;
185 
191  std::vector<const ProgramSequenceBinding *> getBindingsOfSequence(const ProgramSequence *sequence) const;
192 
198  std::vector<const ProgramSequenceBinding *> getBindingsOfSequence(const UUID &sequenceId) const;
199 
205  std::set<const ProgramSequenceBindingMeme *> getSequenceBindingMemesOfProgram(const Program *program) const;
206 
212  std::set<const ProgramSequenceBindingMeme *> getSequenceBindingMemesOfProgram(const UUID &programId) const;
213 
225  std::vector<const ProgramSequenceBinding *>
226  getBindingsAtOffsetOfProgram(const Program *program, int offset, bool includeNearest) const;
227 
239  std::vector<const ProgramSequenceBinding *>
240  getBindingsAtOffsetOfProgram(const UUID &programId, int offset, bool includeNearest) const;
241 
247  std::vector<const ProgramSequenceChord *> getChordsOfSequence(const ProgramSequence *sequence) const;
248 
254  std::vector<const ProgramSequenceChord *> getChordsOfSequence(const UUID &programSequenceId) const;
255 
261  std::vector<const ProgramSequencePatternEvent *> getEventsOfPattern(const ProgramSequencePattern *pattern) const;
262 
268  std::vector<const ProgramSequencePatternEvent *> getEventsOfPattern(const UUID &patternId) const;
269 
274  std::set<const ProgramSequencePattern *>
275  getPatternsOfSequenceAndVoice(const UUID &programSequenceId, const UUID &programVoiceId) const;
276 
281  std::set<const TemplateBinding *> getBindingsOfTemplate(const UUID &templateId) const;
282 
288  std::set<const ProgramSequencePattern *> getSequencePatternsOfProgram(const UUID &programId) const;
289 
295  std::set<const ProgramSequencePattern *> getSequencePatternsOfProgram(const Program *program) const;
296 
302  std::vector<const ProgramSequencePatternEvent *> getSequencePatternEventsOfProgram(const UUID &programId) const;
303 
309  std::vector<const ProgramSequencePatternEvent *> getEventsOfTrack(const ProgramVoiceTrack *track) const;
310 
316  std::vector<const ProgramSequencePatternEvent *> getEventsOfTrack(const UUID &trackId) const;
317 
324  std::vector<const ProgramSequencePatternEvent *>
325  getEventsOfPatternAndTrack(const ProgramSequencePattern *pattern, const ProgramVoiceTrack *track) const;
326 
333  std::vector<const ProgramSequencePatternEvent *>
334  getEventsOfPatternAndTrack(const UUID &patternId, const UUID &trackId) const;
335 
342  std::set<const InstrumentAudio *> getAudiosOfInstrumentTypesAndModes(const std::set<Instrument::Type> &types,
343  const std::set<Instrument::Mode> &modes) const;
344 
350  std::set<const InstrumentAudio *> getAudiosOfInstrumentTypes(const std::set<Instrument::Type> &types) const;
351 
356  std::set<const Instrument *> getInstrumentsOfType(const Instrument::Type &type) const;
357 
364  std::set<const Instrument *> getInstrumentsOfTypesAndModes(const std::set<Instrument::Type> &types,
365  const std::set<Instrument::Mode> &modes) const;
366 
372  std::set<const Instrument *> getInstrumentsOfTypes(const std::set<Instrument::Type> &types) const;
373 
379  std::set<const InstrumentMeme *> getMemesOfInstrument(const UUID &instrumentId) const;
380 
386  std::set<const Instrument *> getInstrumentsOfLibrary(const Library *library) const;
387 
393  std::set<const Instrument *> getInstrumentsOfLibrary(const UUID &libraryId) const;
394 
401  Instrument::Type getInstrumentTypeOfAudio(const UUID &instrumentAudioId) const;
402 
408  std::set<const ProgramMeme *> getMemesOfProgram(const UUID &programId) const;
409 
410 
415  std::set<std::string> getMemesAtBeginning(const Program *program) const;
416 
422  std::set<const ProgramSequenceBindingMeme *>
423  getMemesOfSequenceBinding(const ProgramSequenceBinding *programSequenceBinding) const;
424 
430  std::set<const ProgramSequenceBindingMeme *> getMemesOfSequenceBinding(const UUID &programSequenceBindingId) const;
431 
437  UUID getPatternIdOfEvent(const UUID &eventId);
438 
444  std::set<const ProgramSequencePattern *> getPatternsOfSequence(const ProgramSequence *sequence);
445 
451  std::set<const ProgramSequencePattern *> getPatternsOfSequence(const UUID &sequence);
452 
458  std::set<const ProgramSequencePattern *> getPatternsOfVoice(const ProgramVoice *voice) const;
459 
465  std::set<const ProgramSequencePattern *> getPatternsOfVoice(const UUID &voiceId) const;
466 
472  std::set<const Program *> getProgramsOfLibrary(const Library *library) const;
473 
479  std::set<const Program *> getProgramsOfLibrary(const UUID &libraryId) const;
480 
485  std::set<const Program *> getProgramsOfType(Program::Type type) const;
486 
492  std::optional<const ProgramSequence *> getSequenceOfBinding(const ProgramSequenceBinding *sequenceBinding);
493 
499  std::set<const ProgramSequence *> getSequencesOfProgram(const UUID &programId) const;
500 
506  std::vector<const ProgramSequenceBinding *> getSequenceBindingsOfProgram(const UUID &programId) const;
507 
512  std::vector<const ProgramSequenceChord *> getSequenceChordsOfProgram(const UUID &programId) const;
513 
519  std::set<const ProgramSequenceChordVoicing *> getSequenceChordVoicingsOfProgram(const UUID &programId) const;
520 
526  std::set<const ProgramVoiceTrack *> getTracksOfProgram(const UUID &programId) const;
527 
533  std::set<const ProgramVoiceTrack *> getTracksOfProgramType(Program::Type type) const;
534 
540  std::set<const ProgramVoiceTrack *> getTracksOfVoice(const ProgramVoice *voice) const;
541 
547  std::set<const ProgramVoiceTrack *> getTracksOfVoice(const UUID &voiceId) const;
548 
554  std::set<std::string> getTrackNamesOfVoice(const ProgramVoice *voice) const;
555 
561  std::set<const ProgramSequenceChordVoicing *> getVoicingsOfChord(const ProgramSequenceChord *chord) const;
562 
568  std::set<const ProgramSequenceChordVoicing *> getVoicingsOfChord(const UUID &chordId) const;
569 
576  std::set<const ProgramSequenceChordVoicing *>
577  getVoicingsOfChordAndVoice(const ProgramSequenceChord *chord, const ProgramVoice *voice) const;
578 
585  std::set<const ProgramSequenceChordVoicing *>
586  getVoicingsOfChordAndVoice(const UUID &chordId, const UUID &voiceId) const;
587 
593  std::set<const ProgramVoice *> getVoicesOfProgram(const Program *program) const;
594 
600  std::set<const ProgramVoice *> getVoicesOfProgram(const UUID &programId) const;
601 
607  std::optional<const Template *> getTemplateByIdentifier(const std::optional<std::string>::value_type &identifier);
608 
613  std::optional<const Template *> getFirstTemplate();
614 
619 
626 
630  void clear();
631 
635  void put(const ContentEntityStore *other);
636 
641  std::string toString();
642 
647  };
648 
649 }// namespace XJ
650 
651 #endif//XJMUSIC_CONTENT_STORE_H
#define CONTENT_STORE_CORE_HEADERS(ENTITY, ENTITIES)
Definition: ContentEntityStore.h:33
Definition: ContentEntityStore.h:41
std::set< std::string > getTrackNamesOfVoice(const ProgramVoice *voice) const
Definition: ContentEntityStore.cpp:728
std::vector< const ProgramSequenceChord * > getChordsOfSequence(const ProgramSequence *sequence) const
Definition: ContentEntityStore.cpp:318
std::vector< int > getAvailableOffsets(const ProgramSequenceBinding *sequenceBinding) const
Definition: ContentEntityStore.cpp:200
MemeTaxonomy getMemeTaxonomy()
Definition: ContentEntityStore.cpp:806
std::set< const ProgramSequenceChordVoicing * > getVoicingsOfChordAndVoice(const ProgramSequenceChord *chord, const ProgramVoice *voice) const
Definition: ContentEntityStore.cpp:754
std::set< const Instrument * > getInstrumentsOfType(const Instrument::Type &type) const
Definition: ContentEntityStore.cpp:469
std::optional< const Template * > getFirstTemplate()
Definition: ContentEntityStore.cpp:801
std::optional< const ProgramVoice * > getVoiceOfEvent(const ProgramSequencePatternEvent *event)
Definition: ContentEntityStore.cpp:169
std::set< std::string > getMemesAtBeginning(const Program *program) const
Definition: ContentEntityStore.cpp:544
void put(const ContentEntityStore *other)
Definition: ContentEntityStore.cpp:924
std::vector< const ProgramSequencePatternEvent * > getEventsOfPatternAndTrack(const ProgramSequencePattern *pattern, const ProgramVoiceTrack *track) const
Definition: ContentEntityStore.cpp:428
std::optional< const ProgramVoiceTrack * > getTrackOfEvent(const ProgramSequencePatternEvent *event)
Definition: ContentEntityStore.cpp:165
std::set< const ProgramVoiceTrack * > getTracksOfVoice(const ProgramVoice *voice) const
Definition: ContentEntityStore.cpp:714
std::set< const InstrumentAudio * > getAudiosOfInstrument(const UUID &id) const
Definition: ContentEntityStore.cpp:215
std::set< const InstrumentMeme * > getMemesOfInstrument(const UUID &instrumentId) const
Definition: ContentEntityStore.cpp:503
std::vector< const ProgramSequencePatternEvent * > getSequencePatternEventsOfProgram(const UUID &programId) const
Definition: ContentEntityStore.cpp:394
std::vector< const ProgramSequencePatternEvent * > getEventsOfTrack(const ProgramVoiceTrack *track) const
Definition: ContentEntityStore.cpp:409
std::set< const ProgramSequenceChordVoicing * > getVoicingsOfChord(const ProgramSequenceChord *chord) const
Definition: ContentEntityStore.cpp:739
std::set< const ProgramSequenceChordVoicing * > getSequenceChordVoicingsOfProgram(const UUID &programId) const
Definition: ContentEntityStore.cpp:684
std::set< const ProgramSequencePattern * > getPatternsOfSequence(const ProgramSequence *sequence)
Definition: ContentEntityStore.cpp:584
ContentEntityStore forTemplate(const Template *tmpl)
Definition: ContentEntityStore.cpp:811
std::optional< const ProgramSequence * > getSequenceOfBinding(const ProgramSequenceBinding *sequenceBinding)
Definition: ContentEntityStore.cpp:637
std::set< const Instrument * > getInstrumentsOfTypes(const std::set< Instrument::Type > &types) const
Definition: ContentEntityStore.cpp:493
bool hasInstrumentsOfTypeAndMode(Instrument::Type type, Instrument::Mode mode)
Definition: ContentEntityStore.cpp:193
std::set< const ProgramSequenceBindingMeme * > getSequenceBindingMemesOfProgram(const Program *program) const
Definition: ContentEntityStore.cpp:249
std::set< const ProgramSequencePattern * > getPatternsOfVoice(const ProgramVoice *voice) const
Definition: ContentEntityStore.cpp:598
std::set< const Program * > getProgramsOfLibrary(const Library *library) const
Definition: ContentEntityStore.cpp:612
std::optional< Project * > getProject()
Definition: ContentEntityStore.cpp:160
std::set< const TemplateBinding * > getBindingsOfTemplate(const UUID &templateId) const
Definition: ContentEntityStore.cpp:367
std::vector< const ProgramSequenceBinding * > getSequenceBindingsOfProgram(const UUID &programId) const
Definition: ContentEntityStore.cpp:655
std::set< const ProgramSequencePattern * > getSequencePatternsOfProgram(const UUID &programId) const
Definition: ContentEntityStore.cpp:378
std::set< const ProgramSequence * > getSequencesOfProgram(const UUID &programId) const
Definition: ContentEntityStore.cpp:644
std::set< const InstrumentAudio * > getAudiosOfInstrumentTypes(const std::set< Instrument::Type > &types) const
Definition: ContentEntityStore.cpp:460
std::set< const ProgramMeme * > getMemesOfProgram(const UUID &programId) const
Definition: ContentEntityStore.cpp:534
Instrument::Type getInstrumentTypeOfEvent(const ProgramSequencePatternEvent *event)
Definition: ContentEntityStore.cpp:175
UUID getPatternIdOfEvent(const UUID &eventId)
Definition: ContentEntityStore.cpp:579
std::set< const Program * > getProgramsOfType(Program::Type type) const
Definition: ContentEntityStore.cpp:626
std::vector< const ProgramSequenceChord * > getSequenceChordsOfProgram(const UUID &programId) const
Definition: ContentEntityStore.cpp:669
std::optional< const Template * > getTemplateByIdentifier(const std::optional< std::string >::value_type &identifier)
Definition: ContentEntityStore.cpp:784
std::string toString()
Definition: ContentEntityStore.cpp:981
std::vector< const ProgramSequenceBinding * > getBindingsAtOffsetOfProgram(const Program *program, int offset, bool includeNearest) const
Definition: ContentEntityStore.cpp:265
void clear()
Definition: ContentEntityStore.cpp:903
std::set< const InstrumentAudio * > getAudiosOfInstrumentTypesAndModes(const std::set< Instrument::Type > &types, const std::set< Instrument::Mode > &modes) const
Definition: ContentEntityStore.cpp:449
std::set< const ProgramSequencePattern * > getPatternsOfSequenceAndVoice(const UUID &programSequenceId, const UUID &programVoiceId) const
Definition: ContentEntityStore.cpp:357
std::set< const ProgramVoice * > getVoicesOfProgram(const Program *program) const
Definition: ContentEntityStore.cpp:769
bool hasInstrumentsOfMode(Instrument::Mode mode)
Definition: ContentEntityStore.cpp:188
Instrument::Type getInstrumentTypeOfAudio(const UUID &instrumentAudioId) const
Definition: ContentEntityStore.cpp:527
std::set< const ProgramVoiceTrack * > getTracksOfProgramType(Program::Type type) const
Definition: ContentEntityStore.cpp:704
bool hasInstrumentsOfType(Instrument::Type type)
Definition: ContentEntityStore.cpp:183
std::set< const Instrument * > getInstrumentsOfLibrary(const Library *library) const
Definition: ContentEntityStore.cpp:513
std::set< const Instrument * > getInstrumentsOfTypesAndModes(const std::set< Instrument::Type > &types, const std::set< Instrument::Mode > &modes) const
Definition: ContentEntityStore.cpp:480
std::set< const ProgramVoiceTrack * > getTracksOfProgram(const UUID &programId) const
Definition: ContentEntityStore.cpp:694
std::vector< const ProgramSequencePatternEvent * > getEventsOfPattern(const ProgramSequencePattern *pattern) const
Definition: ContentEntityStore.cpp:337
std::set< const ProgramSequenceBindingMeme * > getMemesOfSequenceBinding(const ProgramSequenceBinding *programSequenceBinding) const
Definition: ContentEntityStore.cpp:564
std::vector< const ProgramSequenceBinding * > getBindingsOfSequence(const ProgramSequence *sequence) const
Definition: ContentEntityStore.cpp:230
Definition: InstrumentAudio.h:13
Definition: InstrumentMeme.h:14
Definition: Instrument.h:14
Definition: Library.h:13
Definition: MemeTaxonomy.h:112
Definition: ProgramMeme.h:14
Definition: ProgramSequenceBindingMeme.h:14
Definition: ProgramSequenceBinding.h:13
Definition: ProgramSequenceChordVoicing.h:13
Definition: ProgramSequenceChord.h:13
Definition: ProgramSequencePatternEvent.h:13
Definition: ProgramSequencePattern.h:13
Definition: ProgramSequence.h:13
Definition: ProgramVoiceTrack.h:13
Definition: ProgramVoice.h:13
Definition: Program.h:14
Definition: Project.h:13
Definition: TemplateBinding.h:14
Definition: Template.h:14
Definition: ActiveAudio.h:11
std::string UUID
Definition: EntityUtils.h:28