1
2 // vim:sw=2:ai
3
4 /*
5 * Copyright (C) 2010 DeNA Co.,Ltd.. All rights reserved.
6 * See COPYRIGHT.txt for details.
7 */
8
9 #include <stdint.h>
10
11 #include "string_buffer.hpp"
12 #include "string_ref.hpp"
13 #include "string_util.hpp"
14
15 #ifndef DENA_ESCAPE_HPP
16 #define DENA_ESCAPE_HPP
17
18 namespace dena {
19
20 void escape_string(char *& wp, const char *start, const char *finish);
21 void escape_string(string_buffer& ar, const char *start, const char *finish);
22 bool unescape_string(char *& wp, const char *start, const char *finish);
23 /* unescaped_string() works even if wp == start */
24 bool unescape_string(string_buffer& ar, const char *start, const char *finish);
25
26 uint32_t read_ui32(char *& start, char *finish);
27 void write_ui32(string_buffer& buf, uint32_t v);
28 void write_ui64(string_buffer& buf, uint64_t v);
29
30 inline bool
is_null_expression(const char * start,const char * finish)31 is_null_expression(const char *start, const char *finish)
32 {
33 return (finish == start + 1 && start[0] == 0);
34 }
35
36 inline void
read_token(char * & start,char * finish)37 read_token(char *& start, char *finish)
38 {
39 char *const p = memchr_char(start, '\t', finish - start);
40 if (p == 0) {
41 start = finish;
42 } else {
43 start = p;
44 }
45 }
46
47 inline void
skip_token_delim_fold(char * & start,char * finish)48 skip_token_delim_fold(char *& start, char *finish)
49 {
50 while (start != finish && start[0] == '\t') {
51 ++start;
52 }
53 }
54
55 inline void
skip_one(char * & start,char * finish)56 skip_one(char *& start, char *finish)
57 {
58 if (start != finish) {
59 ++start;
60 }
61 }
62
63 };
64
65 #endif
66
67