mbed I/F binding for mruby

Dependents:   mruby_mbed_web mirb_mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers symbol.c Source File

symbol.c

00001 #include "mruby.h"
00002 #include "mruby/khash.h"
00003 #include "mruby/array.h"
00004 
00005 typedef struct symbol_name {
00006   size_t len;
00007   const char *name;
00008 } symbol_name;
00009 
00010 /*
00011  *  call-seq:
00012  *     Symbol.all_symbols    => array
00013  *
00014  *  Returns an array of all the symbols currently in Ruby's symbol
00015  *  table.
00016  *
00017  *     Symbol.all_symbols.size    #=> 903
00018  *     Symbol.all_symbols[1,20]   #=> [:floor, :ARGV, :Binding, :symlink,
00019  *                                     :chown, :EOFError, :$;, :String,
00020  *                                     :LOCK_SH, :"setuid?", :$<,
00021  *                                     :default_proc, :compact, :extend,
00022  *                                     :Tms, :getwd, :$=, :ThreadGroup,
00023  *                                     :wait2, :$>]
00024  */
00025 static mrb_value
00026 mrb_sym_all_symbols(mrb_state *mrb, mrb_value self)
00027 {
00028   mrb_sym i, lim;
00029   mrb_value ary = mrb_ary_new_capa(mrb, mrb->symidx);
00030 
00031   for (i=1, lim=mrb->symidx+1; i<lim; i++) {
00032     mrb_ary_push(mrb, ary, mrb_symbol_value(i));
00033   }
00034 
00035   return ary;
00036 }
00037 
00038 /*
00039  * call-seq:
00040  *   sym.length    -> integer
00041  *
00042  * Same as <code>sym.to_s.length</code>.
00043  */
00044 static mrb_value
00045 mrb_sym_length(mrb_state *mrb, mrb_value self)
00046 {
00047   mrb_int len;
00048   mrb_sym2name_len(mrb, mrb_symbol(self), &len);
00049   return mrb_fixnum_value(len);
00050 }
00051 
00052 void
00053 mrb_mruby_symbol_ext_gem_init(mrb_state* mrb)
00054 {
00055   struct RClass *s = mrb->symbol_class;
00056   mrb_define_class_method(mrb, s, "all_symbols", mrb_sym_all_symbols, MRB_ARGS_NONE());
00057   mrb_define_method(mrb, s, "length", mrb_sym_length, MRB_ARGS_NONE());
00058   mrb_define_method(mrb, s, "size", mrb_sym_length, MRB_ARGS_NONE());
00059 }
00060 
00061 void
00062 mrb_mruby_symbol_ext_gem_final(mrb_state* mrb)
00063 {
00064 }
00065