예제 #1
0
파일: mxwriter.c 프로젝트: bpon/wine
HRESULT MXWriter_create(MSXML_VERSION version, IUnknown *outer, void **ppObj)
{
    static const WCHAR version10W[] = {'1','.','0',0};
    mxwriter *This;
    HRESULT hr;

    TRACE("(%p, %p)\n", outer, ppObj);

    if (outer) FIXME("support aggregation, outer\n");

    This = heap_alloc( sizeof (*This) );
    if(!This)
        return E_OUTOFMEMORY;

    This->IMXWriter_iface.lpVtbl = &MXWriterVtbl;
    This->ISAXContentHandler_iface.lpVtbl = &mxwriter_saxcontent_vtbl;
    This->ref = 1;
    This->class_version = version;

    This->props[MXWriter_BOM] = VARIANT_TRUE;
    This->props[MXWriter_DisableEscaping] = VARIANT_FALSE;
    This->props[MXWriter_Indent] = VARIANT_FALSE;
    This->props[MXWriter_OmitXmlDecl] = VARIANT_FALSE;
    This->props[MXWriter_Standalone] = VARIANT_FALSE;
    This->prop_changed = FALSE;
    This->encoding = SysAllocString(utf16W);
    This->version  = SysAllocString(version10W);
    This->xml_enc  = XmlEncoding_UTF16;

    This->element = NULL;

    This->dest = NULL;
    This->dest_written = 0;

    hr = alloc_output_buffer(This->xml_enc, &This->buffer);
    if (hr != S_OK) {
        SysFreeString(This->encoding);
        SysFreeString(This->version);
        heap_free(This);
        return hr;
    }

    init_dispex(&This->dispex, (IUnknown*)&This->IMXWriter_iface, &mxwriter_dispex);

    *ppObj = &This->IMXWriter_iface;

    TRACE("returning iface %p\n", *ppObj);

    return S_OK;
}
예제 #2
0
int find_partition_2d(cloud_2d* data, specs_2d* specs, handler_2d* callback) {

    int return_code = code_success;

    if ( return_code = check_specs(specs) )
        goto exit;

    if ( return_code = check_handler(callback) )
        goto exit;

    double x_min, x_max, y_min, y_max;
    double* min_max[4] = {&x_min, &x_max, &y_min, &y_max};

    if ( return_code = check_data(data, min_max) )
        goto exit;

    treegrid_2d* grid;

    if ( return_code = treegrid_2d_new(&grid, NULL) ) // TODO: define necessary args
        goto exit;

    int num_cells_total = insert_all_points(grid, data);
    if ( num_cells_total < 0) {
        return_code = num_cells_total;
        goto clean_grid;
    }

    double *x_reduc = NULL, *y_reduc = NULL;

    if ( return_code = alloc_output_buffer(&x_reduc, &y_reduc, num_cells_total) )
        goto clean_array;

    add_to_output_buffer(data, grid, x_reduc, y_reduc);

    void* context = callback->use_data_context;
    return_code = callback->use_data(context, x_reduc, y_reduc, num_cells_total);

clean_array:
    if (x_reduc) free(x_reduc);
    if (y_reduc) free(y_reduc);

clean_grid:
    return_code = treegrid_2d_clean(grid);

exit:
    return return_code;

}