ardour
uri_map.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2009-2011 Paul Davis
3  Author: David Robillard
4 
5  This program is free software; you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation; either version 2 of the License, or
8  (at your option) any later version.
9 
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with this program; if not, write to the Free Software
17  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 */
19 
20 #ifndef __ardour_uri_map_h__
21 #define __ardour_uri_map_h__
22 
23 #include <map>
24 
25 #include <boost/utility.hpp>
26 
27 #include <glibmm/threads.h>
28 
29 #include "lv2.h"
30 #include "lv2/lv2plug.in/ns/ext/uri-map/uri-map.h"
31 #include "lv2/lv2plug.in/ns/ext/urid/urid.h"
32 
34 
35 namespace ARDOUR {
36 
42 class LIBARDOUR_API URIMap : public boost::noncopyable {
43 public:
44  static URIMap& instance();
45 
46  URIMap();
47 
48  LV2_Feature* uri_map_feature() { return &_uri_map_feature; }
49  LV2_Feature* urid_map_feature() { return &_urid_map_feature; }
50  LV2_Feature* urid_unmap_feature() { return &_urid_unmap_feature; }
51 
52  LV2_URID_Map* urid_map() { return &_urid_map_feature_data; }
53  LV2_URID_Unmap* urid_unmap() { return &_urid_unmap_feature_data; }
54 
55  uint32_t uri_to_id(const char* uri);
56  const char* id_to_uri(uint32_t id) const;
57 
58  // Cached URIDs for use in real-time code
59  struct URIDs {
60  void init(URIMap& uri_map);
61 
62  uint32_t atom_Chunk;
63  uint32_t atom_Path;
64  uint32_t atom_Sequence;
66  uint32_t atom_URID;
67  uint32_t atom_Blank;
68  uint32_t atom_Object;
69  uint32_t atom_Float;
70  uint32_t log_Error;
71  uint32_t log_Note;
72  uint32_t log_Warning;
73  uint32_t midi_MidiEvent;
74  uint32_t time_Position;
75  uint32_t time_bar;
76  uint32_t time_barBeat;
77  uint32_t time_beatUnit;
78  uint32_t time_beatsPerBar;
80  uint32_t time_frame;
81  uint32_t time_speed;
82  uint32_t patch_Get;
83  uint32_t patch_Set;
84  uint32_t patch_property;
85  uint32_t patch_value;
86  };
87 
89 
90 private:
91  typedef std::map<const std::string, uint32_t> Map;
92  typedef std::map<uint32_t, const std::string> Unmap;
93 
94  Map _map;
95  Unmap _unmap;
96 
97  LV2_Feature _uri_map_feature;
98  LV2_URI_Map_Feature _uri_map_feature_data;
99  LV2_Feature _urid_map_feature;
101  LV2_Feature _urid_unmap_feature;
102  LV2_URID_Unmap _urid_unmap_feature_data;
103 
104  mutable Glib::Threads::Mutex _lock;
105 
106  static URIMap* uri_map;
107 };
108 
109 } // namespace ARDOUR
110 
111 #endif // __ardour_uri_map_h__
uint32_t time_beatsPerBar
Definition: uri_map.h:78
uint32_t atom_eventTransfer
Definition: uri_map.h:65
uint32_t patch_Get
Definition: uri_map.h:82
uint32_t time_barBeat
Definition: uri_map.h:76
uint32_t atom_Chunk
Definition: uri_map.h:62
URIDs urids
Definition: uri_map.h:88
LV2_Feature _urid_unmap_feature
Definition: uri_map.h:101
uint32_t atom_Path
Definition: uri_map.h:63
LV2_Feature * urid_map_feature()
Definition: uri_map.h:49
LV2_URID_Map * urid_map()
Definition: uri_map.h:52
uint32_t time_frame
Definition: uri_map.h:80
LV2_URI_Map_Feature _uri_map_feature_data
Definition: uri_map.h:98
uint32_t atom_Object
Definition: uri_map.h:68
uint32_t time_speed
Definition: uri_map.h:81
uint32_t log_Error
Definition: uri_map.h:70
LV2_URID_Unmap * urid_unmap()
Definition: uri_map.h:53
LV2_Feature _urid_map_feature
Definition: uri_map.h:99
LV2_Feature _uri_map_feature
Definition: uri_map.h:97
Unmap _unmap
Definition: uri_map.h:95
uint32_t time_bar
Definition: uri_map.h:75
std::map< const std::string, uint32_t > Map
Definition: uri_map.h:91
uint32_t time_beatUnit
Definition: uri_map.h:77
Definition: amp.h:29
LV2_Feature * uri_map_feature()
Definition: uri_map.h:48
LV2_URID_Map _urid_map_feature_data
Definition: uri_map.h:100
#define LIBARDOUR_API
uint32_t atom_URID
Definition: uri_map.h:66
uint32_t time_Position
Definition: uri_map.h:74
uint32_t log_Note
Definition: uri_map.h:71
std::map< uint32_t, const std::string > Unmap
Definition: uri_map.h:92
uint32_t patch_Set
Definition: uri_map.h:83
LV2_URID_Unmap _urid_unmap_feature_data
Definition: uri_map.h:102
uint32_t midi_MidiEvent
Definition: uri_map.h:73
uint32_t patch_value
Definition: uri_map.h:85
uint32_t time_beatsPerMinute
Definition: uri_map.h:79
uint32_t patch_property
Definition: uri_map.h:84
uint32_t atom_Sequence
Definition: uri_map.h:64
LV2_Feature * urid_unmap_feature()
Definition: uri_map.h:50
LIBARDOUR_API bool init(bool with_vst, bool try_optimization, const char *localedir)
Definition: globals.cc:376
uint32_t log_Warning
Definition: uri_map.h:72
uint32_t atom_Blank
Definition: uri_map.h:67
Glib::Threads::Mutex _lock
Definition: uri_map.h:104
uint32_t atom_Float
Definition: uri_map.h:69
static URIMap * uri_map
Definition: uri_map.h:106