summaryrefslogtreecommitdiffstats
path: root/src/lib/eiotas_private.h
blob: 39745b6a0feee9ef84ad0487147d3b49a0ec4a27 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/* EIOTAS
 * Copyright (C) 2012 Jérémy Zurcher
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library;
 * if not, see <http://www.gnu.org/licenses/>.
 */

#ifndef __EIOTAS_PRIVATE_H__
#define __EIOTAS_PRIVATE_H__

#ifdef HAVE_CONFIG_H
# include "eiotas_config.h"
#endif
#include "eiotas_main.h"
#include "eiotas_iota.h"

#include <eina_log.h>
#undef EINA_LOG_DOMAIN_DEFAULT
#define EINA_LOG_DOMAIN_DEFAULT eiotas_log_dom
#define EIOTA_LOG_DOMAIN "eiotas"

#define EIOTAS_MAX_VALUE_LENGTH 1024
#define EIOTAS_MAX_PATH_LENGTH 256
#define EIOTAS_MAX_ACTION_LENGTH 16

#define EIOTAS_PATH_SEP '/'
#define EIOTAS_FIELDS_SEP ','
#define EIOTAS_PARTICLE_ARRAY_STEP 3

void eiotas_iota_desinit(Eiotas_Iota *iota);

int eiotas_iota_init(Eiotas_Iota *iota, const char *name, Eiotas_Iota *parent, Eiotas_Type type);

#undef PRINTPTR
#ifdef __clang__
# define PRINTPTR(_p) (unsigned int)_p
#else
# define PRINTPTR(_p) (_p)
#endif

#define CHECK_PARENT()                      \
    if(parent==NULL) {                      \
        ERR("NULL parent not allowed");     \
        return NULL;                        \
    }

#define BUILD_INSTANCE(_type,_x)                \
    _type *_x = (_type*)malloc(sizeof(_type));  \
    if(_x==NULL) {                              \
        ERR("malloc error");                    \
        return NULL;                            \
    }

#define INIT_IOTA(_iota,_name,_parent,_type)                            \
    if(eiotas_iota_init(_iota,_name,(Eiotas_Iota*)_parent,_type)) {     \
        return NULL;                                                    \
    }

#define ADD_TO_PARENT(_parent,_iota,_st_name)                                       \
    if(eina_hash_find(_parent->children,_iota->name)) {                             \
        ERR("%s %s already exists in %s",_st_name,_iota->name,parent->iota.path);   \
        eiotas_iota_desinit(_iota);                                                 \
        return NULL;                                                                \
    }                                                                               \
    eina_hash_direct_add(_parent->children,_iota->name,_iota);

#define CHECK_USERBITS(_user_bits)                      \
    if(_user_bits->data==NULL) {                        \
        ERR("user_bits->data NULL is not allowed");     \
        return  NULL;                                   \
    }                                                   \
    if(_user_bits->free_fct==NULL) {                    \
        ERR("user_bits->free_fct NULL is not allowed"); \
        return  NULL;                                   \
    }                                                   \
    if(_user_bits->recv_fct==NULL) {                    \
        ERR("user_bits->recv_fct NULL is not allowed"); \
        return  NULL;                                   \
    }                                                   \

/* TODO  user_bits->start_fct; user_bits->stop_fct; user_bits->suspend_fct; user_bits->resume_fct; */

#ifdef CRITICAL
#undef CRITICAL
#endif
#define CRITICAL(...) EINA_LOG_DOM_CRIT(_eiotas_log_dom, __VA_ARGS__)

#ifdef ERR
#undef ERR
#endif
#define ERR(...) EINA_LOG_DOM_ERR(_eiotas_log_dom, __VA_ARGS__)

#ifdef WRN
#undef WRN
#endif
#define WRN(...) EINA_LOG_DOM_WARN(_eiotas_log_dom, __VA_ARGS__)

#ifdef INF
#undef INF
#endif
#define INF(...) EINA_LOG_DOM_INFO(_eiotas_log_dom, __VA_ARGS__)

#ifdef DBG
#undef DBG
#endif
#define DBG(...) EINA_LOG_DOM_DBG(_eiotas_log_dom, __VA_ARGS__)

#endif // __EIOTAS_PRIVATE_H__