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 
21 namespace MusicXML2
22 {
23 
24 //______________________________________________________________________________
25 class msrElement : public smartable
26 {
27  public:
28 
29  // creation from MusicXML
30  // ------------------------------------------------------
31 
32  // cloning
33  // ------------------------------------------------------
34 
35  protected:
36 
37  msrElement (
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 };
85 EXP ostream& operator<< (ostream& os, const S_msrElement& elt);
86 
87 //______________________________________________________________________________
88 template <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
MusicXML2::smartable
the base class for smart pointers implementation
Definition: smartpointer.h:29
MusicXML2::msrBrowser
Definition: msrElements.h:89
MusicXML2::SMARTP< msrElement >
MusicXML2::basevisitor
Definition: basevisitor.h:25
MusicXML2::browser
Definition: browser.h:22
MusicXML2::msrElement
Definition: msrElements.h:26