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; }
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; }