source: EcnlProtoTool/trunk/mruby-2.1.1/mrbgems/mruby-test/vformat.c@ 439

Last change on this file since 439 was 439, checked in by coas-nagasima, 4 years ago

mrubyを2.1.1に更新

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
File size: 3.6 KB
Line 
1#include <string.h>
2#include <mruby.h>
3#include <mruby/class.h>
4#include <mruby/data.h>
5#include <mruby/string.h>
6
7/* no argument */
8static mrb_value
9vf_s_format_0(mrb_state *mrb, mrb_value klass)
10{
11 mrb_value fmt_str;
12 const char *fmt;
13
14 mrb_get_args(mrb, "S", &fmt_str);
15 fmt = RSTRING_CSTR(mrb, fmt_str);
16
17 return mrb_format(mrb, fmt);
18}
19
20/* c char */
21static mrb_value
22vf_s_format_c(mrb_state *mrb, mrb_value klass)
23{
24 mrb_value fmt_str, arg_str;
25 const char *fmt;
26 char c;
27
28 mrb_get_args(mrb, "SS", &fmt_str, &arg_str);
29 fmt = RSTRING_CSTR(mrb, fmt_str);
30 c = RSTRING_CSTR(mrb, arg_str)[0];
31
32 return mrb_format(mrb, fmt, c);
33}
34
35/* d int */
36static mrb_value
37vf_s_format_d(mrb_state *mrb, mrb_value klass)
38{
39 mrb_value fmt_str;
40 const char *fmt;
41 mrb_int i;
42 int d;
43
44 mrb_get_args(mrb, "Si", &fmt_str, &i);
45 fmt = RSTRING_CSTR(mrb, fmt_str);
46 d = (int)i;
47
48 return mrb_format(mrb, fmt, d);
49}
50
51#ifndef MRB_WITHOUT_FLOAT
52/* f float */
53static mrb_value
54vf_s_format_f(mrb_state *mrb, mrb_value klass)
55{
56 mrb_value fmt_str;
57 const char *fmt;
58 mrb_float f;
59
60 mrb_get_args(mrb, "Sf", &fmt_str, &f);
61 fmt = RSTRING_CSTR(mrb, fmt_str);
62
63 return mrb_format(mrb, fmt, f);
64}
65#endif
66
67/* i fixnum */
68static mrb_value
69vf_s_format_i(mrb_state *mrb, mrb_value klass)
70{
71 mrb_value fmt_str;
72 const char *fmt;
73 mrb_int i;
74
75 mrb_get_args(mrb, "Si", &fmt_str, &i);
76 fmt = RSTRING_CSTR(mrb, fmt_str);
77
78 return mrb_format(mrb, fmt, i);
79}
80
81/* l char*, size_t */
82static mrb_value
83vf_s_format_l(mrb_state *mrb, mrb_value klass)
84{
85 mrb_value fmt_str, arg_str;
86 const char *fmt;
87 const char *s;
88 mrb_int i;
89 size_t len;
90
91 mrb_get_args(mrb, "SSi", &fmt_str, &arg_str, &i);
92 fmt = RSTRING_CSTR(mrb, fmt_str);
93 s = RSTRING_PTR(arg_str);
94 len = (size_t)i;
95 if (len > (size_t)RSTRING_LEN(arg_str)) len = (size_t)RSTRING_LEN(arg_str);
96
97 return mrb_format(mrb, fmt, s, len);
98}
99
100/* n symbol */
101static mrb_value
102vf_s_format_n(mrb_state *mrb, mrb_value klass)
103{
104 mrb_value fmt_str;
105 const char *fmt;
106 mrb_sym sym;
107
108 mrb_get_args(mrb, "Sn", &fmt_str, &sym);
109 fmt = RSTRING_CSTR(mrb, fmt_str);
110
111 return mrb_format(mrb, fmt, sym);
112}
113
114/* s char* */
115static mrb_value
116vf_s_format_s(mrb_state *mrb, mrb_value klass)
117{
118 mrb_value fmt_str, arg_str;
119 const char *fmt;
120 const char *s;
121
122 mrb_get_args(mrb, "SS", &fmt_str, &arg_str);
123 fmt = RSTRING_CSTR(mrb, fmt_str);
124 s = RSTRING_CSTR(mrb, arg_str);
125
126 return mrb_format(mrb, fmt, s);
127}
128
129/* C RClass */
130static mrb_value
131vf_s_format_C(mrb_state *mrb, mrb_value klass)
132{
133 mrb_value fmt_str, arg_cls;
134 const char *fmt;
135 struct RClass *c;
136
137 mrb_get_args(mrb, "SC", &fmt_str, &arg_cls);
138 fmt = RSTRING_CSTR(mrb, fmt_str);
139 c = mrb_class_ptr(arg_cls);
140
141 return mrb_format(mrb, fmt, c);
142}
143
144/* v value */
145static mrb_value
146vf_s_format_v(mrb_state *mrb, mrb_value klass)
147{
148 mrb_value fmt_str, arg_v;
149 const char *fmt;
150
151 mrb_get_args(mrb, "So", &fmt_str, &arg_v);
152 fmt = RSTRING_CSTR(mrb, fmt_str);
153
154 return mrb_format(mrb, fmt, arg_v);
155}
156
157void
158mrb_init_test_vformat(mrb_state *mrb)
159{
160 struct RClass *vf;
161
162 vf = mrb_define_module(mrb, "TestVFormat");
163 mrb_define_class_method(mrb, vf, "z", vf_s_format_0, MRB_ARGS_REQ(1));
164
165#define VF_DEFINE_FORMAT_METHOD(t) VF_DEFINE_FORMAT_METHOD_n(t,2)
166#define VF_DEFINE_FORMAT_METHOD_n(t,n) mrb_define_class_method(mrb, vf, #t, vf_s_format_##t, MRB_ARGS_REQ(n));
167
168 VF_DEFINE_FORMAT_METHOD(c);
169 VF_DEFINE_FORMAT_METHOD(d);
170#ifndef MRB_WITHOUT_FLOAT
171 VF_DEFINE_FORMAT_METHOD(f);
172#endif
173 VF_DEFINE_FORMAT_METHOD(i);
174 VF_DEFINE_FORMAT_METHOD_n(l,3);
175 VF_DEFINE_FORMAT_METHOD(n);
176 VF_DEFINE_FORMAT_METHOD(s);
177 VF_DEFINE_FORMAT_METHOD(C);
178 VF_DEFINE_FORMAT_METHOD(v);
179}
Note: See TracBrowser for help on using the repository browser.