Skip to content

Instantly share code, notes, and snippets.

@dhh1128
dhh1128 / hello.i
Created February 17, 2014 18:45
hello world in intent
hello: application
Main:
does:
Print("Hello, World!")
int DoSomething(
Foo * foo, /* might be null; call GetDefaultFoo() if so */
Bar ** bar /* if non-null, contains foo's associated Bar upon return */ )
{
... // body of function
}
// mocking variant 1
mock(1, int, Allocator::Run,(mjob_t *J, candidate_t * candidates[MAX_CAND_PER_ALLOC],
int *minTPN, int *maxTPN, char *attrMap, int *jobIndex, candidate_t **bestList,
int *taskCount, int *userCount));
// mocking variant 2
MOCK_CMETHOD4(int, IterateEvents, event_list_t const *, char **, mgevent_obj_t **,
event_iter_t);
// mocking variant 3
@dhh1128
dhh1128 / gpl_example_pseudocode
Last active August 29, 2015 14:04
python-like pseudocode for marks that implement
# Implementation of a mark that precludes gpl license
class no_gpl: mark
propagation = propagation_types.called_code or propagation_types.contained_code
# Override mark.can_bind(). Return reason why binding is
# impossible, or None on success.
def can_bind(site, attachment):
if attachment == mark_types.explicit_affirmative:
if site.type.scope >= scope_types.code_block:
if site.get_call_tree().is_marked('gpl', mark_types.explicit_affirmative):
@dhh1128
dhh1128 / id_validator_mark
Last active August 29, 2015 14:04
id validator mark
id_validator: mark
propagation: propagation_types.package | propagation_types.viral
# Override mark.infect() -- define what parts of code should acquire this mark
# automatically. Return a list of (site, mark_type) tuples.
def infect(site):
infected = []
for module in site.package.modules:
for function in module.functions:
for param in function.parameters:
@dhh1128
dhh1128 / evasive_action.cpp
Last active August 29, 2015 14:06
evasive action snippet
void spaceship::take_evasive_action(list<threat> threats_by_proximity) {
course escape_vector = nullptr;
list<threat> weighted_threats = order_by_evasion_priority(
threats_by_proximity, multiply_by_threat_severity);
if (this->has_warp()) {
bool warp_is_practical = true;
double max_safe_warp = 1.0;
// do a bunch of calculations about whether warp is
@dhh1128
dhh1128 / fancier_variadic_macro
Created November 21, 2014 20:45
fancier variadic macro using GCC's ##__VA_ARGS__ extension
#define eprintf(fmt, ...) \
fprintf(stderr, fmt, ##__VA_ARGS)
@dhh1128
dhh1128 / for_each_macro
Last active October 5, 2019 11:41
"for each"-style macro
// Accept any number of args >= N, but expand to just the Nth one.
// Here, N == 6.
#define _GET_NTH_ARG(_1, _2, _3, _4, _5, N, ...) N
// Define some macros to help us create overrides based on the
// arity of a for-each-style macro.
#define _fe_0(_call, ...)
#define _fe_1(_call, x) _call(x)
#define _fe_2(_call, x, ...) _call(x) _fe_1(_call, __VA_ARGS__)
#define _fe_3(_call, x, ...) _call(x) _fe_2(_call, __VA_ARGS__)
@dhh1128
dhh1128 / macros_overridden_by_arg_count
Last active October 5, 2019 11:45
macros overridden by arg count
// Define two overrides that can be used by the expansion of
// our main macro.
#define _MY_CONCAT3(a, b, c) a b c
#define _MY_CONCAT2(a, b) a b
// Define a macro that uses the "paired, sliding arg list"
// technique to select the appropriate override. You should
// recognize this as similar to the GET_NTH_ARG() macro in
// previous examples.
#define _GET_OVERRIDE(_1, _2, _3, NAME, ...) NAME
@dhh1128
dhh1128 / paired_sliding_arg_list_macro_trick_2
Last active October 5, 2019 11:45
"paired, sliding arg list" that handles zero args
// Accept any number of args >= N, but expand to just the Nth one. The macro
// that calls us still only supports 4 args, but the set of values we might
// need to return is 1 larger, so we increase N to 6.
#define _GET_NTH_ARG(_1, _2, _3, _4, _5, N, ...) N
// Count how many args are in a variadic macro. We now use GCC/Clang's extension to
// handle the case where ... expands to nothing. We must add a placeholder arg before
// ##__VA_ARGS__ (its value is totally irrelevant, but it's necessary to preserve
// the shifting offset we want). In addition, we must add 0 as a valid value to be in
// the N position.