Verovio
Source code documentation
vrvdef.h
1 // Name: vrvdef.h
3 // Author: Laurent Pugin
4 // Created: 2005
5 // Copyright (c) Authors and others. All rights reserved.
7 
8 #ifndef __VRV_DEF_H__
9 #define __VRV_DEF_H__
10 
11 #include <algorithm>
12 #include <functional>
13 #include <list>
14 #include <map>
15 #include <set>
16 #include <tuple>
17 #include <vector>
18 
19 //----------------------------------------------------------------------------
20 
21 #include "attdef.h"
22 
23 #define VRV_UNSET MEI_UNSET
24 
25 //----------------------------------------------------------------------------
26 
27 #define _USE_MATH_DEFINES // needed by Windows for math constants like "M_PI"
28 #include <math.h>
29 
30 // In case it is not defined before...
31 #ifndef M_PI
32 #define M_PI (3.14159265358979323846264338327950288)
33 #endif
34 
35 namespace vrv {
36 
37 //----------------------------------------------------------------------------
38 // Version
39 //----------------------------------------------------------------------------
40 
41 #define VERSION_MAJOR 6
42 #define VERSION_MINOR 3
43 #define VERSION_REVISION 0
44 // Adds "-dev" in the version number - should be set to false for releases
45 #define VERSION_DEV true
46 
47 //----------------------------------------------------------------------------
48 // Resource directory
49 //----------------------------------------------------------------------------
50 #ifdef RESOURCE_DIR
51 #define VRV_RESOURCE_DIR RESOURCE_DIR
52 #else
53 #define VRV_RESOURCE_DIR "/usr/local/share/verovio"
54 #endif
55 
56 //----------------------------------------------------------------------------
57 // Cast redefinition
58 //----------------------------------------------------------------------------
59 
60 // Can be changed between static and dynamic for debug purposes
61 #ifdef VRV_DYNAMIC_CAST
62 // To be used for all cases where type is cheched through Object::m_type
63 #define vrv_cast dynamic_cast
64 #else
65 #define vrv_cast static_cast
66 #endif
67 
68 //----------------------------------------------------------------------------
69 // Default MIDI values
70 //----------------------------------------------------------------------------
71 
72 #define MIDI_VELOCITY 90
73 #define MIDI_TEMPO 120
74 
75 #define UNACC_GRACENOTE_DUR 27 // in milliseconds
76 #define UNACC_GRACENOTE_FRACTION Fraction(1, 2048)
77 
78 //----------------------------------------------------------------------------
79 // Object defines
80 //----------------------------------------------------------------------------
81 
89 enum ClassId : uint16_t {
90  BOUNDING_BOX = 0, // Should not be instanciated as is
91  OBJECT, // Should not be instanciated as is
92  DEVICE_CONTEXT, // Should not be instanciated as is,
93  FLOATING_OBJECT,
94  FLOATING_POSITIONER,
95  FLOATING_CURVE_POSITIONER,
96  // Ids for ungrouped objects
97  ACCID_FLOATING,
98  ALIGNMENT,
99  ALIGNMENT_REFERENCE,
100  CLEF_ATTR,
101  COURSE,
102  DOC,
103  FACSIMILE,
104  FB,
105  GRPSYM,
106  GRACE_ALIGNER,
107  GRAPHIC,
108  INSTRDEF,
109  KEYSIG_ATTR,
110  LABEL,
111  LABELABBR,
112  LAYER,
113  MEASURE,
114  MEASURE_ALIGNER,
115  MENSUR_ATTR,
116  METERSIG_ATTR,
117  OSSIA,
118  PAGE,
119  PAGES,
120  STAFF,
121  STAFF_ALIGNMENT,
122  STAFFGRP,
123  SURFACE,
124  SVG,
125  SYMBOLDEF,
126  SYMBOLTABLE,
127  SYSTEM,
128  SYSTEM_ALIGNER,
129  SYSTEM_ALIGNMENT,
130  TIMESTAMP_ALIGNER,
131  TUNING,
132  ZONE,
133  // Ids for EditorialElement child classes
134  EDITORIAL_ELEMENT,
135  ABBR,
136  ADD,
137  ANNOT,
138  APP,
139  CHOICE,
140  CORR,
141  DAMAGE,
142  DEL,
143  EXPAN,
144  LEM,
145  ORIG,
146  RDG,
147  REF,
148  REG,
149  RESTORE,
150  SIC,
151  SUBST,
152  SUPPLIED,
153  UNCLEAR,
154  EDITORIAL_ELEMENT_max,
155  // Ids for TextLayoutElement child classes
156  TEXT_LAYOUT_ELEMENT,
157  DIV,
158  // Ids for RunningElement child classes
159  RUNNING_ELEMENT,
160  PGFOOT,
161  PGHEAD,
162  RUNNING_ELEMENT_max,
163  TEXT_LAYOUT_ELEMENT_max,
164  // Ids for PageElement child classes
165  PAGE_ELEMENT,
166  PAGE_MILESTONE_END,
167  MDIV,
168  SCORE,
169  PAGE_ELEMENT_max,
170  // Ids for SystemElement child classes
171  SYSTEM_ELEMENT,
172  SYSTEM_MILESTONE_END,
173  ENDING,
174  EXPANSION,
175  PB,
176  SB,
177  SECTION,
178  SYSTEM_ELEMENT_max,
179  // Ids for ControlElement child classes
180  CONTROL_ELEMENT,
181  ANCHOREDTEXT,
182  ANNOTSCORE,
183  ARPEG,
184  BEAMSPAN,
185  BRACKETSPAN,
186  BREATH,
187  CAESURA,
188  CPMARK,
189  DIR,
190  DYNAM,
191  FERMATA,
192  FING,
193  GLISS,
194  HAIRPIN,
195  HARM,
196  LV,
197  MORDENT,
198  MNUM,
199  ORNAM,
200  OCTAVE,
201  PEDAL,
202  PHRASE,
203  PITCHINFLECTION,
204  REH,
205  REPEATMARK,
206  SLUR,
207  TEMPO,
208  TIE,
209  TRILL,
210  TURN,
211  CONTROL_ELEMENT_max,
212  // Ids for LayerElement child classes
213  LAYER_ELEMENT,
214  ACCID,
215  ARTIC,
216  BARLINE,
217  BEAM,
218  BEATRPT,
219  BTREM,
220  CHORD,
221  CLEF,
222  CUSTOS,
223  DIVLINE,
224  DOT,
225  DOTS,
226  EPISEMA,
227  FLAG,
228  FTREM,
229  GENERIC_ELEMENT,
230  GRACEGRP,
231  HALFMRPT,
232  KEYSIG,
233  KEYACCID,
234  LIGATURE,
235  LIQUESCENT,
236  MENSUR,
237  METERSIG,
238  METERSIGGRP,
239  MREST,
240  MRPT,
241  MRPT2,
242  MSPACE,
243  MULTIREST,
244  MULTIRPT,
245  NC,
246  NOTE,
247  NEUME,
248  ORISCUS,
249  PLICA,
250  PROPORT,
251  QUILISMA,
252  STROPHICUS,
253  REST,
254  SPACE,
255  STEM,
256  SYL,
257  SYLLABLE,
258  TABGRP,
259  TABDURSYM,
260  TIMESTAMP_ATTR,
261  TUPLET,
262  TUPLET_BRACKET,
263  TUPLET_NUM,
264  VERSE,
265  LAYER_ELEMENT_max,
266  // Ids for ScoreDefElement child classes
267  SCOREDEF_ELEMENT,
268  LAYERDEF,
269  SCOREDEF,
270  STAFFDEF,
271  SCOREDEF_ELEMENT_max,
272  // Ids for TextElement child classes
273  TEXT_ELEMENT,
274  FIG,
275  FIGURE,
276  LB,
277  NUM,
278  REND,
279  SYMBOL,
280  TEXT,
281  TEXT_ELEMENT_max,
282  //
283  BBOX_DEVICE_CONTEXT,
284  SVG_DEVICE_CONTEXT,
285  CUSTOM_DEVICE_CONTEXT,
286  // Pseudo ids for custom factory functions
287  FACTORY_STAGEDIR,
288  FACTORY_OSTAFF,
289  //
290  UNSPECIFIED
291 };
292 
297 enum InterfaceId {
298  INTERFACE,
299  INTERFACE_ALT_SYM,
300  INTERFACE_AREA_POS,
301  INTERFACE_BOUNDARY,
302  INTERFACE_DURATION,
303  INTERFACE_LINKING,
304  INTERFACE_FACSIMILE,
305  INTERFACE_OFFSET,
306  INTERFACE_OFFSET_SPANNING,
307  INTERFACE_PITCH,
308  INTERFACE_PLIST,
309  INTERFACE_POSITION,
310  INTERFACE_SCOREDEF,
311  INTERFACE_TEXT_DIR,
312  INTERFACE_TIME_POINT,
313  INTERFACE_TIME_SPANNING
314 };
315 
316 //----------------------------------------------------------------------------
317 // Typedefs
318 //----------------------------------------------------------------------------
319 
320 class Alignment;
321 class Arpeg;
322 class ClassIdComparison;
323 class BeamElementCoord;
324 class BoundingBox;
325 class Comparison;
326 class CurveSpannedElement;
327 class DivLine;
328 class FloatingPositioner;
329 class FloatingCurvePositioner;
330 class GraceAligner;
331 class InterfaceComparison;
332 class LayerElement;
333 class LedgerLine;
334 class LinkingInterface;
335 class Liquescent;
336 class Nc;
337 class Note;
338 class Neume;
339 class Object;
340 class PlistInterface;
341 class Point;
342 class Staff;
343 class Option;
344 class TextElement;
345 class TimePointInterface;
346 class TimeSpanningInterface;
347 
348 typedef std::vector<Object *> ArrayOfObjects;
349 
350 typedef std::vector<const Object *> ArrayOfConstObjects;
351 
352 typedef std::list<Object *> ListOfObjects;
353 
354 typedef std::list<const Object *> ListOfConstObjects;
355 
356 typedef std::set<Object *> SetOfObjects;
357 
358 typedef std::set<const Object *> SetOfConstObjects;
359 
360 typedef std::set<const Object *> SetOfConstObjects;
361 
362 typedef std::vector<Note *> ChordNoteGroup;
363 
364 typedef std::vector<std::tuple<Alignment *, Alignment *, int>> ArrayOfAdjustmentTuples;
365 
366 typedef std::vector<std::tuple<Alignment *, Arpeg *, int, bool>> ArrayOfAlignmentArpegTuples;
367 
368 typedef std::vector<BeamElementCoord *> ArrayOfBeamElementCoords;
369 
370 typedef std::vector<std::pair<int, int>> ArrayOfIntPairs;
371 
372 typedef std::multimap<std::string, LinkingInterface *> MapOfLinkingInterfaceIDPairs;
373 
374 typedef std::map<std::string, Note *> MapOfNoteIDPairs;
375 
376 typedef std::vector<std::pair<Object *, std::string>> ArrayOfPlistObjectIDPairs;
377 
378 typedef std::vector<CurveSpannedElement *> ArrayOfCurveSpannedElements;
379 
380 typedef std::list<std::pair<Object *, data_MEASUREBEAT>> ListOfObjectBeatPairs;
381 
382 typedef std::list<std::pair<const Object *, std::string>> ListOfObjectAttNamePairs;
383 
384 typedef std::list<std::pair<TimePointInterface *, ClassId>> ListOfPointingInterClassIdPairs;
385 
386 typedef std::list<std::pair<TimeSpanningInterface *, ClassId>> ListOfSpanningInterClassIdPairs;
387 
388 typedef std::list<std::pair<TimeSpanningInterface *, Object *>> ListOfSpanningInterOwnerPairs;
389 
390 typedef std::vector<FloatingPositioner *> ArrayOfFloatingPositioners;
391 
392 typedef std::vector<FloatingCurvePositioner *> ArrayOfFloatingCurvePositioners;
393 
394 typedef std::vector<BoundingBox *> ArrayOfBoundingBoxes;
395 
396 typedef std::vector<LedgerLine> ArrayOfLedgerLines;
397 
398 typedef std::vector<TextElement *> ArrayOfTextElements;
399 
400 typedef std::map<const Staff *, std::multiset<int>> MapOfNoteLocs;
401 
402 typedef std::map<const Staff *, std::set<int>> MapOfDotLocs;
403 
404 typedef std::map<std::string, Option *> MapOfStrOptions;
405 
406 typedef std::map<int, data_ACCIDENTAL_WRITTEN> MapOfOctavedPitchAccid;
407 
408 typedef std::map<int, GraceAligner *> MapOfIntGraceAligners;
409 
410 typedef std::vector<std::pair<std::u32string, bool>> ArrayOfStringDynamTypePairs;
411 
412 typedef std::map<ClassId, std::function<Object *(void)>> MapOfClassIdConstructors;
413 
414 typedef std::map<std::string, ClassId> MapOfStrClassIds;
415 
416 typedef std::vector<std::pair<LayerElement *, LayerElement *>> MeasureTieEndpoints;
417 
418 typedef bool (*NotePredicate)(const Note *);
419 
420 typedef std::vector<std::pair<LayerElement *, data_DURATION>> ArrayOfElementDurPairs;
421 
422 typedef std::map<int, std::list<int>> MapOfOssiaStaffNs;
423 
433 struct IntTree {
434  std::map<int, IntTree> child;
435 };
436 
437 typedef std::map<int, IntTree> IntTree_t;
438 
445 typedef std::map<int, bool> VerseN_t;
446 typedef std::map<int, VerseN_t> LayerN_VerserN_t;
447 typedef std::map<int, LayerN_VerserN_t> StaffN_LayerN_VerseN_t;
448 
449 //----------------------------------------------------------------------------
450 // Global defines
451 //----------------------------------------------------------------------------
452 
453 #define DEFINITION_FACTOR 10
454 
455 #define DEFAULT_UNIT 9.0
456 
457 #define isIn(x, a, b) (((x) >= std::min((a), (b))) && ((x) <= std::max((a), (b))))
458 
465 enum FunctorCode { FUNCTOR_CONTINUE = 0, FUNCTOR_SIBLINGS, FUNCTOR_STOP };
466 
467 //----------------------------------------------------------------------------
468 // Maximum number of levels between parent and children for optimizing search
469 //----------------------------------------------------------------------------
470 
474 #define MAX_ACCID_DEPTH -1
475 
477 #define MAX_BEAM_DEPTH -1
478 
480 #define MAX_CHORD_DEPTH -1
481 
483 #define MAX_FTREM_DEPTH -1
484 
486 #define MAX_LIGATURE_DEPTH -1
487 
489 #define MAX_TABGRP_DEPTH -1
490 
492 #define MAX_TUPLET_DEPTH -1
493 
495 #define MAX_STAFFGRP_DEPTH -1
496 
498 #define MAX_NOTE_DEPTH -1
499 
500 //----------------------------------------------------------------------------
501 // Ossia staff / layer @n offset (assuming we never have @n that high)
502 //----------------------------------------------------------------------------
503 
504 #define OSSIA_N_OFFSET 1000000
505 
506 //----------------------------------------------------------------------------
507 // Unicode music codepoints
508 //----------------------------------------------------------------------------
509 
510 #define UNICODE_FLAT U'\u266D' // ♭
511 #define UNICODE_NATURAL U'\u266E' // ♮
512 #define UNICODE_SHARP U'\u266F' // ♯
513 
514 #define UNICODE_UNDERTIE U'\u203F' // ‿
515 
516 #define UNICODE_DAL_SEGNO U'\U0001D109' // 𝄉
517 #define UNICODE_DA_CAPO U'\U0001D10A' // 𝄊
518 #define UNICODE_SEGNO U'\U0001D10B' // 𝄋
519 #define UNICODE_CODA U'\U0001D10C' // 𝄌
520 
521 #define UNICODE_DOUBLE_FLAT U'\U0001D12B' // 𝄫
522 #define UNICODE_DOUBLE_SHARP U'\U0001D12A' // 𝄪
523 
524 //----------------------------------------------------------------------------
525 // VerovioText codepoints
526 //----------------------------------------------------------------------------
527 
536 #define VRV_TEXT_HARM \
537  U"\u266D\u266E\u266F" \
538  U"\uE260\uE261\uE262\uE263\uE264" \
539  U"\uEA50\uEA51\uEA52\uEA53\uEA54\uEA55\uEA56\uEA57\uEA58\uEA59\uEA5A\uEA5B\uEA5C\uEA5D\uEA5E" \
540  U"\uEA5F\uEA60\uEA61\uEA62\uEA63\uEA64\uEA65\uEA66\uEA67" \
541  U"\uECC0"
542 
543 //----------------------------------------------------------------------------
544 // data.LINEWIDTHTERM factors
545 //----------------------------------------------------------------------------
546 
547 #define LINEWIDTHTERM_factor_narrow 1.0
548 #define LINEWIDTHTERM_factor_medium 2.0
549 #define LINEWIDTHTERM_factor_wide 4.0
550 
551 //----------------------------------------------------------------------------
552 // Types for editorial element
553 //----------------------------------------------------------------------------
554 
555 // the maximum is 255 (unsigned char)
556 enum EditorialLevel {
557  EDITORIAL_UNDEFINED = 0,
558  EDITORIAL_SCORE,
559  EDITORIAL_TOPLEVEL,
560  EDITORIAL_SCOREDEF,
561  EDITORIAL_STAFFGRP,
562  EDITORIAL_MEASURE,
563  EDITORIAL_STAFF,
564  EDITORIAL_LAYER,
565  EDITORIAL_NOTE,
566  EDITORIAL_TEXT,
567  EDITORIAL_FB,
568  EDITORIAL_RUNNING,
569 };
570 
571 //----------------------------------------------------------------------------
572 // Visibility for editorial and mdiv elements
573 //----------------------------------------------------------------------------
574 
575 enum VisibilityType { Hidden = 0, Visible };
576 
577 //----------------------------------------------------------------------------
578 // The used SMuFL glyph anchors
579 //----------------------------------------------------------------------------
580 
581 enum SMuFLGlyphAnchor {
582  SMUFL_stemDownNW = 0,
583  SMUFL_stemUpSE,
584  SMUFL_cutOutNE,
585  SMUFL_cutOutNW,
586  SMUFL_cutOutSE,
587  SMUFL_cutOutSW
588 };
589 
590 //----------------------------------------------------------------------------
591 // Spanning types for control events
592 //----------------------------------------------------------------------------
593 
594 enum { SPANNING_START_END = 0, SPANNING_START, SPANNING_END, SPANNING_MIDDLE };
595 
596 //----------------------------------------------------------------------------
597 // Types for layer element
598 //----------------------------------------------------------------------------
599 
605 enum ElementScoreDefRole {
606  SCOREDEF_NONE = 0,
607  SCOREDEF_SYSTEM,
608  SCOREDEF_INTERMEDIATE,
609  SCOREDEF_CAUTIONARY,
610  SCOREDEF_OSSIA
611 };
612 
613 //----------------------------------------------------------------------------
614 // ScoreDef drawing labels
615 //----------------------------------------------------------------------------
616 
617 enum ScoreDefDrawingLabels { DRAWING_LABEL_FULL = 0, DRAWING_LABEL_ABBR, DRAWING_LABEL_NONE };
618 
619 //----------------------------------------------------------------------------
620 // Artic types
621 //----------------------------------------------------------------------------
622 
623 enum ArticType { ARTIC_INSIDE = 0, ARTIC_OUTSIDE };
624 
625 //----------------------------------------------------------------------------
626 // Visibility optimization
627 //----------------------------------------------------------------------------
628 
629 enum VisibilityOptimization { OPTIMIZATION_NONE = 0, OPTIMIZATION_HIDDEN, OPTIMIZATION_SHOW };
630 
631 //----------------------------------------------------------------------------
632 // Layout positions (3 x 3 grid)
633 //----------------------------------------------------------------------------
634 
635 enum {
636  POSITION_LEFT = 0,
637  POSITION_CENTER,
638  POSITION_RIGHT,
639 };
640 
641 enum {
642  POSITION_TOP = 0,
643  POSITION_MIDDLE = 3,
644  POSITION_BOTTOM = 6,
645 };
646 
647 //----------------------------------------------------------------------------
648 // Ligature shape bitfields
649 //----------------------------------------------------------------------------
650 
651 enum {
652  LIGATURE_DEFAULT = 0,
653  LIGATURE_STEM_LEFT_UP = 1,
654  LIGATURE_STEM_LEFT_DOWN = 2,
655  LIGATURE_STEM_RIGHT_UP = 4,
656  LIGATURE_STEM_RIGHT_DOWN = 8,
657  LIGATURE_OBLIQUE = 16,
658  LIGATURE_STACKED = 32
659 };
660 
661 //----------------------------------------------------------------------------
662 // Analytical markup bitfields
663 //----------------------------------------------------------------------------
664 
665 enum {
666  MARKUP_DEFAULT = 0,
667  MARKUP_ANALYTICAL_TIE = 1,
668  MARKUP_ANALYTICAL_FERMATA = 2,
669  MARKUP_GRACE_ATTRIBUTE = 4,
670  MARKUP_ARTIC_MULTIVAL = 8,
671  MARKUP_SCOREDEF_DEFINITIONS = 16
672 };
673 
674 //----------------------------------------------------------------------------
675 // Layout information
676 //----------------------------------------------------------------------------
677 
678 enum LayoutInformation { LAYOUT_NONE = 0, LAYOUT_ENCODED, LAYOUT_DONE };
679 
680 //----------------------------------------------------------------------------
681 // Bounding box access
682 //----------------------------------------------------------------------------
683 
684 enum Accessor { SELF = 0, CONTENT };
685 
686 //----------------------------------------------------------------------------
687 // Some keys
688 //----------------------------------------------------------------------------
689 
690 enum { KEY_LEFT = 37, KEY_UP = 38, KEY_RIGHT = 39, KEY_DOWN = 40 };
691 
692 //----------------------------------------------------------------------------
693 // Stem sameas drawing role
694 //----------------------------------------------------------------------------
695 
696 enum StemSameasDrawingRole { SAMEAS_NONE = 0, SAMEAS_UNSET, SAMEAS_PRIMARY, SAMEAS_SECONDARY };
697 
698 //----------------------------------------------------------------------------
699 // Smufl text font (selected font or fallback)
700 //----------------------------------------------------------------------------
701 
702 enum SmuflTextFont { SMUFL_NONE = 0, SMUFL_FONT_SELECTED, SMUFL_FONT_FALLBACK };
703 
704 //----------------------------------------------------------------------------
705 // Graphic ID type
706 //----------------------------------------------------------------------------
707 
708 enum GraphicID { PRIMARY = 0, SPANNING, SYMBOLREF };
709 
710 //----------------------------------------------------------------------------
711 // Measure type
712 //----------------------------------------------------------------------------
713 
714 enum MeasureType { MEASURED = 0, UNMEASURED, NEUMELINE };
715 
716 //----------------------------------------------------------------------------
717 // Focus status type
718 //----------------------------------------------------------------------------
719 
720 enum FocusStatusType { FOCUS_UNSET = 0, FOCUS_SET, FOCUS_USED };
721 
722 //----------------------------------------------------------------------------
723 // Mensural cast-off type
724 //----------------------------------------------------------------------------
725 
726 enum MensuralCastOffType { MENSURAL_CAST_OFF_INIT = 0, MENSURAL_CAST_OFF_UNSET, MENSURAL_CAST_OFF_RESET };
727 
728 //----------------------------------------------------------------------------
729 // The score time unit (quarter note)
730 //----------------------------------------------------------------------------
731 
732 #define SCORE_TIME_UNIT 4
733 
734 //----------------------------------------------------------------------------
735 // Section representing a line in neon
736 //----------------------------------------------------------------------------
737 
738 #define NEUME_LINE_TYPE "neon-neume-line"
739 
740 //----------------------------------------------------------------------------
741 // Legacy Wolfgang defines
742 //----------------------------------------------------------------------------
743 
744 #define OCTAVE_OFFSET 4
745 
746 // in half staff spaces (but should be 6 in two-voice notation)
747 #define STANDARD_STEMLENGTH 7
748 #define STANDARD_STEMLENGTH_TAB 3
749 
750 //----------------------------------------------------------------------------
751 // Temporary - to be made an option?
752 //----------------------------------------------------------------------------
753 
754 #define TABLATURE_STAFF_RATIO 1.75
755 #define GERMAN_TAB_STAFF_RATIO 2.2
756 
757 #define SUPER_SCRIPT_FACTOR 0.58
758 #define SUPER_SCRIPT_POSITION -0.20 // lowered down from the midline
759 #define SUB_SCRIPT_POSITION -0.17 // lowered down from the baseline
760 
761 //----------------------------------------------------------------------------
762 // Neume notation note size to staff size ratio defines
763 //----------------------------------------------------------------------------
764 
765 #define NOTE_HEIGHT_TO_STAFF_SIZE_RATIO 2
766 #define NOTE_WIDTH_TO_STAFF_SIZE_RATIO 1.4
767 
768 } // namespace vrv
769 
770 #endif // __VRV_DEF_H__
Generic int map recursive structure for storing hierachy of values For example, we want to process al...
Definition: vrvdef.h:433