Merge branch 'master' into develop
[jack2.git] / common / JackMetadata.h
blobcd66f8ac8fd4704a18eb0953e26e8d01b010a4d7
1 /*
2 Copyright (C) 2011 David Robillard
3 Copyright (C) 2013 Paul Davis
5 This program is free software; you can redistribute it and/or modify it
6 under the terms of the GNU Lesser General Public License as published by
7 the Free Software Foundation; either version 2.1 of the License, or (at
8 your option) any later version.
10 This program is distributed in the hope that it will be useful, but WITHOUT
11 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
13 License for more details.
15 You should have received a copy of the GNU Lesser General Public License
16 along with this program; if not, write to the Free Software Foundation,
17 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 #ifndef __JackMetadata__
21 #define __JackMetadata__
23 #include <stdint.h>
25 #if HAVE_DB
26 #include <db.h>
27 #endif
29 #include <jack/uuid.h>
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
35 typedef struct {
36 const char* key;
37 const char* data;
38 const char* type;
39 } jack_property_t;
41 typedef struct {
42 jack_uuid_t subject;
43 uint32_t property_cnt;
44 jack_property_t* properties;
45 uint32_t property_size;
46 } jack_description_t;
48 typedef enum {
49 PropertyCreated,
50 PropertyChanged,
51 PropertyDeleted
52 } jack_property_change_t;
54 typedef void (*JackPropertyChangeCallback)(jack_uuid_t subject,
55 const char* key,
56 jack_property_change_t change,
57 void* arg);
59 #ifdef __cplusplus
61 #endif
64 namespace Jack
67 class JackClient;
69 /*!
70 \brief Metadata base.
73 class JackMetadata
75 private:
77 #if HAVE_DB
78 DB* fDB;
79 DB_ENV* fDBenv;
80 const bool fIsEngine;
81 #endif
83 int PropertyInit();
84 int PropertyChangeNotify(JackClient* client, jack_uuid_t subject, const char* key, jack_property_change_t change);
86 #if HAVE_DB
87 void MakeKeyDbt(DBT* dbt, jack_uuid_t subject, const char* key);
88 #endif
90 public:
92 JackMetadata(bool isEngine);
93 ~JackMetadata();
95 int GetProperty(jack_uuid_t subject, const char* key, char** value, char** type);
96 int GetProperties(jack_uuid_t subject, jack_description_t* desc);
97 int GetAllProperties(jack_description_t** descriptions);
99 int GetDescription(jack_uuid_t subject, jack_description_t* desc);
100 int GetAllDescriptions(jack_description_t** descs);
101 void FreeDescription(jack_description_t* desc, int free_actual_description_too);
103 int SetProperty(JackClient* client, jack_uuid_t subject, const char* key, const char* value, const char* type);
105 int RemoveProperty(JackClient* client, jack_uuid_t subject, const char* key);
106 int RemoveProperties(JackClient* client, jack_uuid_t subject);
107 int RemoveAllProperties(JackClient* client);
112 } // end of namespace
114 #endif