Beast - Music Synthesizer and Composer  0.11.1+10.g2da35
sfistore.hh
Go to the documentation of this file.
1  // Licensed GNU LGPL v2.1 or later: http://www.gnu.org/licenses/lgpl.html
2 #ifndef __SFI_STORE_H__
3 #define __SFI_STORE_H__
4 
5 #include <sfi/sfivalues.hh>
6 #include <sfi/sfiring.hh>
7 
8 /* --- typedefs and structures --- */
9 typedef gint /* -errno || length */ (*SfiStoreReadBin) (gpointer data,
10  void *buffer,
11  guint blength);
12 typedef struct
13 {
14  GString *text;
15  guint indent;
16  SfiRing *bblocks;
17  guint needs_break : 1;
18  guint flushed : 1;
19  gchar comment_start;
20 } SfiWStore;
21 #define SFI_TOKEN_UNMATCHED ((GTokenType) (G_TOKEN_LAST + 1))
22 #define SFI_TOKEN_LAST ((GTokenType) (SFI_TOKEN_UNMATCHED + 1))
23 typedef struct _SfiRStore SfiRStore;
24 typedef GTokenType (*SfiStoreParser) (gpointer context_data,
25  SfiRStore *rstore, /* parser_this */
26  GScanner *scanner,
27  gpointer user_data);
28 struct _SfiRStore
29 {
30  GScanner *scanner;
31  gchar *fname;
32  gint close_fd;
33  gpointer parser_this;
34  SfiNum bin_offset;
35 };
36 
37 
38 /* --- writable store --- */
39 SfiWStore* sfi_wstore_new (void);
40 void sfi_wstore_destroy (SfiWStore *wstore);
41 void sfi_wstore_push_level (SfiWStore *wstore);
42 void sfi_wstore_pop_level (SfiWStore *wstore);
43 void sfi_wstore_break (SfiWStore *wstore);
44 void sfi_wstore_puts (SfiWStore *wstore,
45  const gchar *string);
46 void sfi_wstore_putc (SfiWStore *wstore,
47  gchar character);
48 #define sfi_wstore_printf(wstore, ...) sfi_wstore_puts (wstore, Rapicorn::string_format (__VA_ARGS__).c_str())
49 void sfi_wstore_putf (SfiWStore *wstore,
50  gfloat vfloat);
51 void sfi_wstore_putd (SfiWStore *wstore,
52  gdouble vdouble);
53 void sfi_wstore_put_value (SfiWStore *wstore,
54  const GValue *value);
55 void sfi_wstore_put_param (SfiWStore *wstore,
56  const GValue *value,
57  GParamSpec *pspec);
58 void sfi_wstore_put_binary (SfiWStore *wstore,
59  SfiStoreReadBin reader,
60  gpointer data,
61  GDestroyNotify destroy);
62 gint /*-errno*/ sfi_wstore_flush_fd (SfiWStore *wstore,
63  gint fd);
64 const gchar* sfi_wstore_peek_text (SfiWStore *wstore,
65  guint *length);
66 
67 
68 /* --- readable store --- */
69 SfiRStore* sfi_rstore_new (void);
70 SfiRStore* sfi_rstore_new_open (const gchar *fname);
71 void sfi_rstore_destroy (SfiRStore *rstore);
72 void sfi_rstore_input_fd (SfiRStore *rstore,
73  gint fd,
74  const gchar *fname);
75 void sfi_rstore_input_text (SfiRStore *rstore,
76  const gchar *text,
77  const gchar *text_name);
78 gboolean sfi_rstore_eof (SfiRStore *rstore);
79 GTokenType sfi_rstore_parse_param (SfiRStore *rstore,
80  GValue *value,
81  GParamSpec *pspec);
82 GTokenType sfi_rstore_ensure_bin_offset (SfiRStore *rstore);
83 guint64 sfi_rstore_get_bin_offset (SfiRStore *rstore);
84 GTokenType sfi_rstore_parse_binary (SfiRStore *rstore,
85  SfiNum *offset_p,
86  SfiNum *length_p);
87 GTokenType sfi_rstore_parse_zbinary (SfiRStore *rstore,
88  SfiNum *offset_p,
89  SfiNum *length_p);
90 GTokenType sfi_rstore_parse_until (SfiRStore *rstore,
91  GTokenType closing_token,
92  gpointer context_data,
93  SfiStoreParser try_statement,
94  gpointer user_data);
95 guint sfi_rstore_parse_all (SfiRStore *rstore,
96  gpointer context_data,
97  SfiStoreParser try_statement,
98  gpointer user_data);
99 void sfi_rstore_error (SfiRStore *rstore, const std::string &msg);
100 void sfi_rstore_unexp_token (SfiRStore *rstore,
101  GTokenType expected_token);
102 void sfi_rstore_warn (SfiRStore *rstore, const std::string &msg);
103 GTokenType sfi_rstore_warn_skip (SfiRStore *rstore, const std::string &msg);
104 typedef gboolean (SfiRStoreQuickScan) (SfiRStore *rstore,
105  gpointer data);
106 void sfi_rstore_quick_scan (SfiRStore *rstore,
107  const gchar *identifier,
108  SfiRStoreQuickScan qcheck,
109  gpointer data);
110 
111 
112 /* --- convenience --- */
113 #define sfi_scanner_parse_or_return(scanner, token) G_STMT_START { \
114  GTokenType _t = GTokenType (token); \
115  if (g_scanner_get_next_token (scanner) != _t) \
116  return _t; \
117 } G_STMT_END
118 #define sfi_scanner_peek_or_return(scanner, token) G_STMT_START { \
119  GTokenType _t = GTokenType (token); \
120  GScanner *__s = (scanner); \
121  if (g_scanner_peek_next_token (__s) != _t) \
122  { \
123  g_scanner_get_next_token (__s); /* advance to error pos */ \
124  return _t; \
125  } \
126 } G_STMT_END
127 
128 #endif /* __SFI_STORE_H__ */
STL class.
Definition: sfistore.hh:28
Definition: sfiring.hh:21
Definition: sfistore.hh:12