void FSParams::write_to_stream(struct fs_output_stream* os, fs_bool write_head){ if(write_head){ fs_stream_write_byte(os, type_array ? PARAMS_TYPE_ARRAY : PARAMS_TYPE_DOUCMENT); } fs_stream_write_int16(os, size()); FSParams::params_iterate iter; for(iter = begin() ; iter != end() ; iter++){ params_type type = (*iter)->type; if(type_hash){ fs_stream_write_string(os, (*iter)->key, strlen( (*iter)->key )); } switch (type) { case PARAMS_TYPE_INT: fs_stream_write_byte(os, PARAMS_TYPE_INT); fs_stream_write_int32(os, get<int>( (*iter)->key ) ); break; case PARAMS_TYPE_ARRAY: get<FSParams*>( (*iter)->key )->write_to_stream(os); break; case PARAMS_TYPE_BOOL: fs_stream_write_byte(os, PARAMS_TYPE_BOOL); fs_stream_write_byte(os, get<bool>( (*iter)->key ) ? 1 : 0 ); break; case PARAMS_TYPE_DOUBLE: fs_stream_write_byte(os, PARAMS_TYPE_DOUBLE); fs_stream_write_double(os, get<double>( (*iter)->key ) ); break; case PARAMS_TYPE_DOUCMENT: fs_stream_write_byte(os, PARAMS_TYPE_DOUCMENT); get<FSParams*>( (*iter)->key )->write_to_stream(os); break; case PARAMS_TYPE_INT64: fs_stream_write_byte(os, PARAMS_TYPE_INT64); fs_stream_write_int64(os, get<long long>( (*iter)->key ) ); break; case PARAMS_TYPE_UTF8: fs_stream_write_byte(os, PARAMS_TYPE_UTF8); fs_stream_write_string(os, get<const char*>( (*iter)->key ), strlen( get<const char*>( (*iter)->key ) )); break; case PARAMS_TYPE_NULL: fs_stream_write_byte(os, PARAMS_TYPE_NULL); break; default: break; } } }
VALUE rb_OStream_write_string(VALUE self, VALUE v){ Check_Type(v, T_STRING); if(TYPE(v) == T_STRING){ struct fs_output_stream* os = NULL; Data_Get_Struct(self, struct fs_output_stream, os); const char* cStr = StringValueCStr(v); fs_stream_write_string(os, cStr, strnlen(cStr, 0xffff)); return self; } return Qnil; }
void fs_stream_write_c_string( struct fs_output_stream* stream, const char* string){ fs_stream_write_string(stream, string, strlen(string)); }