source: EcnlProtoTool/trunk/mruby-1.2.0/mrbgems/mruby-symbol-ext/src/symbol.c@ 270

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

mruby版ECNLプロトタイピング・ツールを追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-csrc
File size: 1.6 KB
Line 
1#include "mruby.h"
2#include "mruby/khash.h"
3#include "mruby/array.h"
4
5typedef struct symbol_name {
6 size_t len;
7 const char *name;
8} symbol_name;
9
10/*
11 * call-seq:
12 * Symbol.all_symbols => array
13 *
14 * Returns an array of all the symbols currently in Ruby's symbol
15 * table.
16 *
17 * Symbol.all_symbols.size #=> 903
18 * Symbol.all_symbols[1,20] #=> [:floor, :ARGV, :Binding, :symlink,
19 * :chown, :EOFError, :$;, :String,
20 * :LOCK_SH, :"setuid?", :$<,
21 * :default_proc, :compact, :extend,
22 * :Tms, :getwd, :$=, :ThreadGroup,
23 * :wait2, :$>]
24 */
25static mrb_value
26mrb_sym_all_symbols(mrb_state *mrb, mrb_value self)
27{
28 mrb_sym i, lim;
29 mrb_value ary = mrb_ary_new_capa(mrb, mrb->symidx);
30
31 for (i=1, lim=mrb->symidx+1; i<lim; i++) {
32 mrb_ary_push(mrb, ary, mrb_symbol_value(i));
33 }
34
35 return ary;
36}
37
38/*
39 * call-seq:
40 * sym.length -> integer
41 *
42 * Same as <code>sym.to_s.length</code>.
43 */
44static mrb_value
45mrb_sym_length(mrb_state *mrb, mrb_value self)
46{
47 mrb_int len;
48 mrb_sym2name_len(mrb, mrb_symbol(self), &len);
49 return mrb_fixnum_value(len);
50}
51
52void
53mrb_mruby_symbol_ext_gem_init(mrb_state* mrb)
54{
55 struct RClass *s = mrb->symbol_class;
56 mrb_define_class_method(mrb, s, "all_symbols", mrb_sym_all_symbols, MRB_ARGS_NONE());
57 mrb_define_method(mrb, s, "length", mrb_sym_length, MRB_ARGS_NONE());
58 mrb_define_method(mrb, s, "size", mrb_sym_length, MRB_ARGS_NONE());
59}
60
61void
62mrb_mruby_symbol_ext_gem_final(mrb_state* mrb)
63{
64}
Note: See TracBrowser for help on using the repository browser.