Not logged in.  Login/Logout/Register | List snippets | | Create snippet | Upload image | Upload data

101
LINES

< > BotCompany Repo | #1000658 - print function (=System.out.println + logging in memory)

JavaX fragment (include) [tags: use-pretranspiled]

Libraryless. Click here for Pure Java version (2683L/16K).

please include function tempInterceptPrintIfNotIntercepted. // cmodules need this

ifdef NotifyingPrintLog
static volatile new NotifyingStringBuffer local_log; // not redirected
svoid _onLoad_print() {
  print_autoRotate();
}
endifdef
ifndef NotifyingPrintLog
static volatile new StringBuffer local_log; // not redirected
endifndef

ifdef print_rst
static new StringBuffer rst_printBuf;
static ReliableSingleThread rst_print = rst(r rst_print_flush);

svoid rst_print_flush() {
  System.out.print(getAndClearStringBuffer(rst_printBuf));
}
endifdef

static volatile Appendable print_log = local_log; // might be redirected, e.g. to main bot

// in bytes - will cut to half that
static volatile int print_log_max = 1024*1024;
static volatile int local_log_max = 100*1024;

static boolean print_silent; // total mute if set

static new O print_byThread_lock;
static volatile ThreadLocal<O> print_byThread; // special handling by thread - prefers F1<S, Bool>
static volatile O print_allThreads;
static volatile O print_preprocess;

static void print() {
  print("");
}

static <A> A print(S s, A o) {
  print((endsWithLetterOrDigit(s) ? s + ": " : s) + o);
  ret o;
}

// slightly overblown signature to return original object...
static <A> A print(A o) {
  ping_okInCleanUp();
  if (print_silent) return o;
  S s = o + "\n";
  print_noNewLine(s);
  return o;
}

static void print_noNewLine(String s) {
  ifndef LeanMode
  try {
    O f = getThreadLocal(print_byThread_dontCreate());
    if (f == null) f = print_allThreads;
      if (f != null)
        // We do need the general callF machinery here as print_byThread is sometimes shared between modules
        if (isFalse(
          ifclass F1
            f instanceof F1 ? f/F1.get(s) :
          endif
          callF(f, s))) ret;
  } catch e {
    System.out.println(getStackTrace(e));
  }
  endifndef

  print_raw(s);
}

static void print_raw(String s) {
  ifndef LeanMode
  if (print_preprocess != null) s = (S) callF(print_preprocess, s);
  s = fixNewLines(s);
  endifndef
  Appendable loc = local_log;
  Appendable buf = print_log;
  int loc_max = print_log_max;
  if (buf != loc && buf != null) {
    print_append(buf, s, print_log_max);
    loc_max = local_log_max;
  }
  if (loc != null) 
    print_append(loc, s, loc_max);
  ifdef print_rst
    rst_printBuf.append(s);
    rst_print.trigger();
  endifdef
  ifndef print_rst
    System.out.print(s);
  endifndef
  vmBus_send printed(mc(), s);
}

svoid print_autoRotate() {
  ifdef NotifyingPrintLog
  makeNotifyingStringBufferRotate(local_log, () -> local_log_max);
  endifdef
}

download  show line numbers  debug dex  old transpilations   

Travelled to 17 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, ddnzoavkxhuk, gwrvuhgaqvyk, irmadwmeruwu, ishqpsrjomds, jtubtzbbkimh, lpdgvwnxivlt, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, tslmcundralx, tvejysmllsmz, xrpafgyirdlv

No comments. add comment

Snippet ID: #1000658
Snippet name: print function (=System.out.println + logging in memory)
Eternal ID of this version: #1000658/37
Text MD5: fcd04338ef7fb311c0dab3126714a852
Transpilation MD5: 7c5fc57c14067d67f2014c2674d4b3a8
Author: stefan
Category:
Type: JavaX fragment (include)
Public (visible to everyone): Yes
Archived (hidden from active list): No
Created/modified: 2021-02-19 14:25:31
Source code size: 2687 bytes / 101 lines
Pitched / IR pitched: No / No
Views / Downloads: 1042 / 11570
Version history: 36 change(s)
Referenced in: [show references]

Formerly at http://tinybrain.de/1000658 & http://1000658.tinybrain.de