Mercurial > octave
view test/mk_bc_overloads_expected.m @ 31260:c5c8bf50449c
Improve performance of isfield from linear time to constant time (bug #58105)
Patch author: Anonymous in Bug #58105 Comment #7
https://savannah.gnu.org/bugs/index.php?58105#comment7
The isfield function was taking time proportional to the number of
fields in a struct to determine whether something was a member or not.
With this change, isfield performance becomes constant irrespective
of the number of fields, speeding up performance by over 200X, and
also allowing the use of struct as a hashmap if the user desires.
ov-base.h: Add new isfield function declaration
ov-base.cc: Add new isfield function definition
ov-struct.h: Add new isfield function definitions
ov-struct.cc: Do not call map_value
ov.h: Add new isfield function definition
author | Arun Giridhar <arungiridhar@gmail.com> |
---|---|
date | Wed, 05 Oct 2022 10:35:31 -0400 |
parents | fc4bb4bd1d5e |
children |
line wrap: on
line source
%% this script is intended to be Matlab compatible %% first, run the script % %% ./build_bc_overloads_tests.sh overloads_only % %% to generate the overloaded functions. % ex.double = 1; ex.single = single (1); ex.logical = true; ex.char = 'char'; ex.int8 = int8 (1); ex.int16 = int16 (1); ex.int32 = int32 (1); ex.int64 = int64 (1); ex.uint8 = uint8 (1); ex.uint16 = uint16 (1); ex.uint32 = uint32 (1); ex.uint64 = uint64 (1); ex.cell = {}; ex.struct = struct (); ex.function_handle = @numel; f = fieldnames (ex); n = numel (f); fid = fopen ('bc_overloads_expected','w'); fid for i = 1:n for j = 1:n s = tbcover (ex.(f{i}), ex.(f{j})); fprintf (fid, '%s %s %s\n', f{i}, f{j}, s); end end fclose (fid)