Coder Social home page Coder Social logo

reloadhost's Introduction

simple POSIX platform live code reloading

=== USAGE ===
$ reloadhost <your_shared_library> [argv...]

=== CLIENT ===
Your target application will need to support the reloadhost. A simple example:

#include "reloadhost.h"

// all of your heap allocated application state
state_t *state;

// called on RH_RELOAD
static void reload() {
    // ...
}

int RH_ENTRY_NAME(
    int argc,
    char *argv[],
    reload_host_op op,
    reload_host_t *reload_host);

// used when built with RELOADABLE but linked into executable instead of shared
int main(int argc, char *argv[]) {
    int res;
    if ((res = RH_ENTRY_NAME(argc, argv, RH_INIT, NULL))) { return res; }
    while (true) {
        if ((res = RH_ENTRY_NAME(argc, argv, RH_STEP, NULL))) {
            if (res == RH_CLOSE_REQUESTED) {
                break;
            } else {
                return res;
            }
        }
    }
    return RH_ENTRY_NAME(argc, argv, RH_DEINIT, NULL);
}

// reload_host entry point
int RH_ENTRY_NAME(
    int argc,
    char *argv[],
    reload_host_op op,
    reload_host_t *reload_host) {
    if (!state) {
        state = calloc(1, sizeof(*state));
    }

    switch (op) {
    case RH_INIT:
        state = calloc(1, sizeof(*state));
        if (reload_host) {
            reload_host->userdata = state;
            state->reload_host = reload_host;
        }
        init();
        return 0;
    case RH_DEINIT:
        deinit();
        return 0;
    case RH_RELOAD:
        assert(reload_host);
        state = reload_host->userdata;
        reload();
        return 0;
    case RH_STEP:
        if (reload_host) {
            state = reload_host->userdata;
        }
        if (state->quit) { return RH_CLOSE_REQUESTED; }
    }

    if (reload_host) {
        state->reload_host = reload_host;
    }

    // whatever your loop function is
    loop();
    return 0;
}

reloadhost's People

Contributors

jdah avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.