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 "string_buffer.hpp"
10 #include "string_ref.hpp"
11 #include "string_util.hpp"
12 
13 #ifndef DENA_ESCAPE_HPP
14 #define DENA_ESCAPE_HPP
15 
16 namespace dena {
17 
18 void escape_string(char *& wp, const char *start, const char *finish);
19 void escape_string(string_buffer& ar, const char *start, const char *finish);
20 bool unescape_string(char *& wp, const char *start, const char *finish);
21   /* unescaped_string() works even if wp == start */
22 bool unescape_string(string_buffer& ar, const char *start, const char *finish);
23 
24 uint32 read_ui32(char *& start, char *finish);
25 void write_ui32(string_buffer& buf, uint32 v);
26 void write_ui64(string_buffer& buf, uint64 v);
27 
28 inline bool
is_null_expression(const char * start,const char * finish)29 is_null_expression(const char *start, const char *finish)
30 {
31   return (finish == start + 1 && start[0] == 0);
32 }
33 
34 inline void
read_token(char * & start,char * finish)35 read_token(char *& start, char *finish)
36 {
37   char *const p = memchr_char(start, '\t', finish - start);
38   if (p == 0) {
39     start = finish;
40   } else {
41     start = p;
42   }
43 }
44 
45 inline void
skip_token_delim_fold(char * & start,char * finish)46 skip_token_delim_fold(char *& start, char *finish)
47 {
48   while (start != finish && start[0] == '\t') {
49     ++start;
50   }
51 }
52 
53 inline void
skip_one(char * & start,char * finish)54 skip_one(char *& start, char *finish)
55 {
56   if (start != finish) {
57     ++start;
58   }
59 }
60 
61 };
62 
63 #endif
64 
65