Example #1
0
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;
        }
        
    }
    
}
Example #2
0
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;
}
Example #3
0
void
fs_stream_write_c_string( struct fs_output_stream* stream,  const char* string){
    fs_stream_write_string(stream, string, strlen(string));
}