- 02 Feb, 2016 4 commits
-
-
David Gibson authored
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-
David Gibson authored
idtree.c:146 triggers a "comparison is always false" warning on some compiler configurations, since the 'id' variable is unsigned. Elsewhere in the module ids seem to be represented by (signed) ints, so use the same convention here, suppressing the warning and also maybe being more correct in other ways. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-
David Gibson authored
The HTABLE_DEFINE_TYPE macro builds a type-specific hash table by constructing a bunch of simple wrapper functions. The user of the hash table may not end up using all of these. With gcc the fact that the functions are inline stops an warnings about unused functions, but that's not the case with clang. Suppress these warnings by marking all the constructed functions except for name##_add() as UNNEEDED (using the macro from ccan/compiler). _add is left alone on the grounds that a hash table you never add anything to isn't much use, so this will help you to spot an entirely redundant HTABLE_DEFINE_TYPE invocation. *_init() would be a more obvious choice, except that there is both *_init() and *_init_sized() and you only need to use one of these. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-
David Gibson authored
The usual way of construction strmap objects is to use the STRMAP_MEMBERS() macro which expands to both a raw strmap structure and a tcon type canary. However, the tcon type canary involves a flexible array member which means that in standard C99 STRMAP_MEMBERS() must appear only at the end of a structure definition. But worse, that structure can then only appear at the end of any other structure it is included in, which is pretty inconvenient for the intended purpose of creating type specific strmaps. gcc extensions allow this to work (somehow), but clang complains loudly about it. The tcon module already includes the TCON_WRAP() mechanism, which already provides this same sort of type-specific definitions in a more general way. So convert strmap (and its users) to that approach. This removes STRMAP_MEMBERS() entirely, breaking compatibility. I'm hoping strmap is used in few enough places that we can get away with that. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-
- 29 Jan, 2016 2 commits
-
-
Rusty Russell authored
It does not seem to respect stack games! Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-
Dan Good authored
altstack - run a function with a dedicated stack, and then release the memory Signed-off-by: Dan Good <dan@dancancode.com>
-
- 27 Jan, 2016 2 commits
-
-
David Gibson authored
bfs_dequeue() and dfs_pop() discard the return values of lqueue_dequeue() and lstack_pop() respectively. This is correct, but causes warnings in some compiler configurations (including the one currently used by travis-ci.org). Use the cast-to-void idiom to tell the compiler this is intentional. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-
David Gibson authored
The 'rest' variable in examples_run.c:find_expect() was unused. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-
- 26 Jan, 2016 2 commits
-
-
David Gibson authored
configurator.c contains an if with an empty statement on the same line as the condition. This is very easy to misread, and also causes a warning from clang, so move the ; onto the next line. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-
David Gibson authored
Still not exactly a great coverage of different C compilers, but clearly better than *just* gcc. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-
- 21 Jan, 2016 1 commit
-
-
Dan Good authored
rszshm - resizable pointer-safe shared memory Signed-off-by: Dan Good <dan@dancancode.com> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-
- 19 Jan, 2016 3 commits
-
-
Rusty Russell authored
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-
Rusty Russell authored
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-
Rusty Russell authored
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-
- 18 Jan, 2016 1 commit
-
-
Rusty Russell authored
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-
- 05 Jan, 2016 1 commit
-
-
Dan Good authored
Thanks to the detailed feedback from David Gibson, I made the following improvements: * add missing includes * check for statement expression support, give an error if absent * ccanlint directive to skip "without features" steps * add license ref to top of source files * rename run1.c test to api1.c Signed-off-by: Dan Good <dan@dancancode.com>
-
- 28 Dec, 2015 1 commit
-
-
Dan Good authored
deque - type-preserving resizing circular deque Signed-off-by: Dan Good <dan@dancancode.com> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-
- 14 Dec, 2015 1 commit
-
-
Rusty Russell authored
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-
- 10 Dec, 2015 2 commits
- 09 Dec, 2015 3 commits
-
-
Joel Stanley authored
progress found but fubar in MOD is now: 'progress' found but 'fubar' in MOD Signed-off-by: Joel Stanley <joel@jms.id.au> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-
Joel Stanley authored
The webfont forces http, which results in a mixed content warning if you're visiting the site on https. Strip the protocol so we use whatever the user has connected with. Signed-off-by: Joel Stanley <joel@jms.id.au> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-
Joel Stanley authored
The SVN mirror disappeared some time ago. It now lives on Github. Signed-off-by: Joel Stanley <joel@jms.id.au> Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-
- 20 Nov, 2015 12 commits
-
-
Rusty Russell authored
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-
Rusty Russell authored
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-
Rusty Russell authored
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-
Rusty Russell authored
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-
Rusty Russell authored
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-
David Gibson authored
This patch adds a new test graph "shortcut2" which includes a negative cost edge. Along with that we add a testcase for Dijkstra's algorithm checking that it gracefully fails in this case. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-
David Gibson authored
For all the existing test graphs, the shortest path by cost is also the shortest path by number of edges. This patch adds a new test graph where that is not the case, in order to test that the Dijkstra's algorithm implementation correctly handles that case. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-
David Gibson authored
At the moment the "parallel" test graph just uses the default cost of 1 for all the links between the two nodes. This patch changes that so that the links have cost 2, except (optionally) one with cost 1. This provides a useful test for the Dijkstra's algorithm implementation to ensure that it picks the correct link for the shortest path. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-
David Gibson authored
Implement Dijkstra's algorithm for one-source shortest-path. This uses the lpq module as the implementation of the priority queue. That means this implementation is some way behind the theoretical efficiency of Dijkstra's algorithm. It should be reasonably straightforward to swap out the priority queue for a better one in the future, though. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-
David Gibson authored
This allows the edge_info callback to supply a cost or length for an edge. For now we only support 'long' valued costs. If the callback doesn't supply a cost, it's considered cost 1. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-
Rusty Russell authored
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-
Rusty Russell authored
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
-
- 15 Nov, 2015 1 commit
-
-
Andrew Jeffery authored
Neatly, this reduces some of the OpenMP-related noise in the implementation by removing the need for the include. The loop body of grp_for() is also clearer as a result of the change; the changes to the function interfaces motivated a re-think of the complexity here.
-
- 13 Nov, 2015 1 commit
-
-
Andrew Jeffery authored
-
- 12 Nov, 2015 1 commit
-
-
David Gibson authored
There are situations where aga algorithms may want to check if a node is up-to-date (i.e. has yet been discovered by the current algorithm) without making it up to date if it's not. This adds an internal function to do so. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-
- 08 Nov, 2015 1 commit
-
-
Andrew Jeffery authored
The cosine similarity measure[1] (O(m + n)) contributes a decent runtime reduction when used as a filter prior to execution of more expensive algorithms such as LCS[2] (O(m * n)). A private test set of 3500 strings was used to quantify the improvement. The shape of the test set is described by Python's Pandas module as: >>> frames.apply(len).describe() count 3500.000000 mean 47.454286 std 14.980197 min 10.000000 25% 37.000000 50% 45.000000 75% 61.000000 max 109.000000 dtype: float64 >>> The tests were performed on a lightly loaded Lenovo X201s stocked with a Intel Core i7 L 640 @ 2.13GHz CPU with 3.7 GiB of memory. The test was compiled with GCC 4.9.3: $ gcc --version gcc (Gentoo 4.9.3 p1.0, pie-0.6.2) 4.9.3 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Using the test program outlined below, ten runs for input set sizes incrementing in batches of 500 were taken prior to filtering with cosine similarity: 500: 0.61, 0.25, 0.08, 0.07, 0.07, 0.07, 0.09, 0.07, 0.07, 0.07 1000: 0.33, 0.32, 0.34, 0.32, 0.32, 0.33, 0.32, 0.32, 0.34, 0.32 1500: 0.72, 1.53, 0.72, 0.70, 0.72, 0.70, 0.72, 0.71, 1.46, 0.71 2000: 1.22, 1.20, 1.22, 1.98, 1.20, 1.20, 1.22, 1.94, 1.20, 1.20 2500: 1.97, 2.72, 1.94, 2.33, 2.44, 1.94, 2.82, 1.93, 1.94, 2.69 3000: 2.69, 3.41, 2.66, 3.38, 2.67, 3.42, 2.63, 3.44, 2.65, 3.39 3500: 4.18, 3.65, 4.21, 4.21, 3.56, 4.21, 4.16, 3.63, 4.20, 4.13 After adding the cosine similarity filter the runtimes became: 500: 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02 1000: 0.08, 0.07, 0.07, 0.07, 0.08, 0.07, 0.07, 0.08, 0.07, 0.07 1500: 0.16, 0.16, 0.15, 0.16, 0.16, 0.15, 0.15, 0.15, 0.16, 0.16 2000: 0.26, 0.26, 0.25, 0.26, 0.26, 0.26, 0.25, 0.26, 0.26, 0.26 2500: 0.41, 0.41, 0.41, 0.40, 0.42, 0.42, 0.42, 0.41, 0.41, 0.41 3000: 0.58, 0.56, 0.57, 0.56, 0.58, 0.57, 0.56, 0.56, 0.57, 0.55 3500: 0.75, 0.74, 0.73, 0.74, 0.74, 0.73, 0.72, 0.75, 0.75, 0.75 As such, on average the runtime improvements are: N Avg Pre Avg Post Improvement (Pre / Post) 500 0.145 0.02 7.25 1000 0.326 0.073 4.47 1500 0.869 0.156 5.57 2000 1.358 0.258 5.26 2500 2.272 0.412 5.51 3000 3.034 0.566 5.36 3500 4.014 0.74 5.42 The test driver is as below, where both it and its dependencies were compiled with 'CFLAGS=-O2 -fopenmp' and linked with 'LDFLAGS=-fopenmp', 'LDLIBS=-lm': $ cat test.c #include "config.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include "ccan/strgrp/strgrp.h" int main(void) { FILE *f; char *buf; struct strgrp *ctx; f = fdopen(0, "r"); #define BUF_SIZE 512 buf = malloc(BUF_SIZE); ctx = strgrp_new(0.85); while(fgets(buf, BUF_SIZE, f)) { buf[strcspn(buf, "\r\n")] = '\0'; if (!strgrp_add(ctx, buf, NULL)) { printf("Failed to classify %s\n", buf); } } strgrp_free(ctx); free(buf); fclose(f); return 0; } [1] https://en.wikipedia.org/wiki/Cosine_similarity [2] https://en.wikipedia.org/wiki/Longest_common_subsequence_problem
-
- 03 Nov, 2015 1 commit
-
-
David Gibson authored
Add an enum to record error codes for aga routines. The current algorithms, dfs and bfs don't have any error conditions except those reported by callbacks. So, for now, the only code is "no error", but this will be expanded in future. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-