class Ox::Sax::Value
Values in the SAX callbacks. They can be converted to various different types. with the _as_x()_ methods.
Public Instance Methods
as_bool()
click to toggle source
return value as an boolean.
static VALUE sax_value_as_bool(VALUE self) { return (0 == strcasecmp("true", ((SaxDrive)DATA_PTR(self))->buf.str)) ? Qtrue : Qfalse; }
as_f()
click to toggle source
return value as an Float.
static VALUE sax_value_as_f(VALUE self) { SaxDrive dr = DATA_PTR(self); if ('\0' == *dr->buf.str) { return Qnil; } return rb_float_new(strtod(dr->buf.str, 0)); }
as_i()
click to toggle source
return value as an Fixnum.
static VALUE sax_value_as_i(VALUE self) { SaxDrive dr = DATA_PTR(self); const char *s = dr->buf.str; long n = 0; int neg = 0; if ('\0' == *s) { return Qnil; } if ('-' == *s) { neg = 1; s++; } else if ('+' == *s) { s++; } for (; '\0' != *s; s++) { if ('0' <= *s && *s <= '9') { n = n * 10 + (*s - '0'); } else { rb_raise(ox_arg_error_class, "Not a valid Fixnum.\n"); } } if (neg) { n = -n; } return LONG2NUM(n); }
as_s()
click to toggle source
return value as an String.
static VALUE sax_value_as_s(VALUE self) { SaxDrive dr = DATA_PTR(self); VALUE rs; if ('\0' == *dr->buf.str) { return Qnil; } if (dr->options.convert_special) { ox_sax_collapse_special(dr, dr->buf.str, dr->buf.pos, dr->buf.line, dr->buf.col); } switch (dr->options.skip) { case CrSkip: buf_collapse_return(dr->buf.str); break; case SpcSkip: buf_collapse_white(dr->buf.str); break; default: break; } rs = rb_str_new2(dr->buf.str); #if HAVE_RB_ENC_ASSOCIATE if (0 != dr->encoding) { rb_enc_associate(rs, dr->encoding); } #endif return rs; }
as_sym()
click to toggle source
return value as an Symbol.
static VALUE sax_value_as_sym(VALUE self) { SaxDrive dr = DATA_PTR(self); if ('\0' == *dr->buf.str) { return Qnil; } return str2sym(dr, dr->buf.str, 0); }
as_time()
click to toggle source
return value as an Time.
static VALUE sax_value_as_time(VALUE self) { SaxDrive dr = DATA_PTR(self); const char *str = dr->buf.str; VALUE t; if ('\0' == *str) { return Qnil; } if (Qnil == (t = parse_double_time(str)) && Qnil == (t = parse_xsd_time(str))) { VALUE args[1]; /*printf("**** time parse\n"); */ *args = rb_str_new2(str); t = rb_funcall2(ox_time_class, ox_parse_id, 1, args); } return t; }
empty()
click to toggle source
return true if the value is empty.
static VALUE sax_value_empty(VALUE self) { return ('\0' == *((SaxDrive)DATA_PTR(self))->buf.str) ? Qtrue : Qfalse; }