LibMusicXML 3.18
msrElements.h
1/*
2 MusicXML Library
3 Copyright (C) Grame 2006-2013
4
5 This Source Code Form is subject to the terms of the Mozilla Public
6 License, v. 2.0. If a copy of the MPL was not distributed with this
7 file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
9 Grame Research Laboratory, 11, cours de Verdun Gensoul 69002 Lyon - France
10 research@grame.fr
11*/
12
13#ifndef ___msrElements___
14#define ___msrElements___
15
16#include "typedefs.h"
17#include "tree_browser.h"
18#include "rational.h"
19
20
21namespace MusicXML2
22{
23
24//______________________________________________________________________________
25class msrElement : public smartable
26{
27 public:
28
29 // creation from MusicXML
30 // ------------------------------------------------------
31
32 // cloning
33 // ------------------------------------------------------
34
35 protected:
36
38 int inputLineNumber);
39
40 virtual ~msrElement ();
41
42 public:
43
44 // set and get
45 // ------------------------------------------------------
46
47 int getInputLineNumber ()
48 { return fInputLineNumber; }
49
50 // services
51 // ------------------------------------------------------
52
53 public:
54
55 // visitors
56 // ------------------------------------------------------
57
58 virtual void acceptIn (basevisitor* v);
59 virtual void acceptOut (basevisitor* v);
60
61 virtual void browseData (basevisitor* v) = 0;
62
63 public:
64
65 // print
66 // ------------------------------------------------------
67
68 virtual std::string asShortString () const;
69 virtual std::string asString () const;
70
71 virtual void print (ostream& os) const;
72
73 virtual void shortPrint (ostream& os) const;
74
75 virtual void printSummary (ostream& os) {}
76
77 protected:
78
79 // fields
80 // ------------------------------------------------------
81
82 int fInputLineNumber;
83};
85EXP ostream& operator<< (ostream& os, const S_msrElement& elt);
86
87//______________________________________________________________________________
88template <typename T> class msrBrowser : public browser <T>
89{
90 public:
91
92 msrBrowser (basevisitor* v) : fVisitor (v) {}
93
94 virtual ~msrBrowser () {}
95
96 public:
97
98 virtual void set (basevisitor* v) { fVisitor = v; }
99
100 virtual void browse (T& t) {
101 enter (t);
102
103 t.browseData (fVisitor);
104
105 leave (t);
106 }
107
108 protected:
109
110 basevisitor* fVisitor;
111
112 virtual void enter (T& t) { t.acceptIn (fVisitor); }
113 virtual void leave (T& t) { t.acceptOut (fVisitor); }
114};
115
116
117} // namespace MusicXML2
118
119
120#endif
Definition: basevisitor.h:25
Definition: browser.h:22
Definition: msrElements.h:89
Definition: msrElements.h:26
the base class for smart pointers implementation
Definition: smartpointer.h:29