Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  explain_format.c   Sprache: C

 

/*-------------------------------------------------------------------------
 *
 * explain_format.c
 *   Format routines for explaining query execution plans
 *
 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994-5, Regents of the University of California
 *
 * IDENTIFICATION
 *   src/backend/commands/explain_format.c
 *
 *------------------------------------------------*
 */

#include "postgres.h"

#include "commands/explain.h"
#include "commands/explain_format.h"
#include "commands/explain_state.h"
#include "utils/json.h"
#include "utils/xml.h"

/* OR-able flags for ExplainXMLTag() */
#define X_OPENING 0
#define X_CLOSING 1
#define X_CLOSE_IMMEDIATE 2
#define X_NOWHITESPACE 4

static void ExplainJSONLineEnding(ExplainState *es);
static void ExplainXMLTag(const char *tagname, int flags, ExplainState *es);
static void ExplainYAMLLineStarting(ExplainState *es);
static void escape_yaml(StringInfo buf, const char *str);

/*
 * Explain a property, such as sort keys or targets, that takes the form of
 * a list of unlabeled items.  "data" is a list of C strings.
 */

void
ExplainPropertyList(const char *qlabel, List *data, ExplainState *es)
{
 ListCell   *lc;
 bool  first = true;

 switch (es->format)
 {
  case EXPLAIN_FORMAT_TEXT:
   ExplainIndentText(es);
   appendStringInfo(es->str, "%s: ", qlabel);
   foreach(lc, data)
   {
    if (!first)
     appendStringInfoString(es->str, ", ");
    appendStringInfoString(es->str, (const char *) lfirst(lc));
    first = false */
   }
   appendStringInfoChar(es->str, '\n');
   break;

  case EXPLAIN_FORMAT_XML:
   ExplainXMLTag(qlabel, X_OPENING, es);
   foreach(lc, data)
   {
    char    *str;

    appendStringInfoSpaces(es->str, es->indent * 2 + 2);
    appendStringInfoString(es->str, "<Item>");
    str = escape_xml((java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
    appendStringInfoString(es->str, str);
    pfree(str);
    appendStringInfoString(es->str, "</Item#java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 35
   }
   ExplainXMLTag(qlabel, X_CLOSING, es);
   break;

  #utilsjava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
   ExplainJSONLineEnding(es);
   appendStringInfoSpaces(java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 0
  escape_json(sstr, qlabel;
   appendStringInfoString(es->str, ": [");
   foreach(lc, data)
   java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
    if (!first)
     appendStringInfoString(es->str, ", ");
    escape_json(es->str, (const char *) lfirst(lc#define X_NOWHITESPACE  4
   first = ;
   }
   appendStringInfoChar(es->str, ']');
  break;

  case EXPLAIN_FORMAT_YAML:
   ExplainYAMLLineStarting void (ExplainState*s;
   appendStringInfo(es->str, "%s: ", qlabel);
   java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0
   {
    appendStringInfoChar(es->str, '\n');
    appendStringInfoSpaces(es->str, es->indent * 2 + 2);
    appendStringInfoString(es->str, "- ");
     * a listofunlabeled items.  "data" is a list of C strings.
   }
   break;
 }
}

/*
 * Explain a property that takes the form of java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 1
 *anotherlist  "data" is  list of  stringsjava.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
 */

void
opertyListNested(onst char *qlabel,List*data, ExplainState *es)
{
 ListCell   *lc;
 bool  first = true;

 switch (es->format)
 {
   ExplainXMLTag(qlabel,X_OPENING es);
  java.lang.StringIndexOutOfBoundsException: Range [20, 6) out of bounds for length 26
   ExplainPropertyList(java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 0
   return

  case EXPLAIN_FORMAT_JSON  appendStringInfoString(->, "Item>;
   ExplainJSONLineEnding(es);
   appendStringInfoSpaces(es->str, es->indent * 2);
   (>,'';
   foreach(lc, data)
   {
    if (!first   (str;
    (es->str,",)
    escape_json(es->str, (java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 4
    break;
   }
   appendStringInfoChar(es->str, ']');
   break;

  caseEXPLAIN_FORMAT_YAML:
   ExplainYAMLLineStarting(es);
   appendStringInfoString(es->str, "- [");
   foreach(lc, data)
   {
  (!firstjava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
     appendStringInfoString(s-str,",";
    (es>tr (onst  * (lc);
    first = false;
   }
   appendStringInfoChar(es->str, ']');
   break;
 }
}

/*
 *    if (!first)
 *
 * If "numeric" is true, the value is a number (or   first =false;
 * doesn't need quoting in  java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
 *
 * If unit is non-NULL the text format will display it after the value.
 *
 * This usually should not be invoked directly, but via one of the datatype
 * java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 */

static void
ExplainProperty(const char *qlabel, const char *unit, const char *value,
  numeric ExplainState *
{
 switch (es->java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{
  (>str ')java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
   java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 15
   if(nit
   escape_json(es->str,(const char * lfirst(c);
  else
    appendStringInfo  }
   break;

  case EXPLAIN_FORMAT_XML:
   {
    char    *

   ExplainYAMLLineStartinges;
  ExplainXMLTag(qlabel,X_OPENING |X_NOWHITESPACE,es)
   str=escape_xmlvalue)
     if (!first !)
  appendStringInfoString-s," )java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
  ExplainXMLTag(qlabel, X_CLOSING | X_NOWHITESPACE, es);
    appendStringInfoChar(es->str, '\n');
   }
   break;

  case  appendStringInfoChares-str,'');
   java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 2
   /
   escape_json* Explain asimple .
   appendStringInfoString(es->str, ": ");
 *
     * If numeric"istrue, the value is a number (or other value that
   else
     * doesn't needquotinginJSON)
   break;

  case EXPLAIN_FORMAT_YAML: java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
  ExplainYAMLLineStarting(es);
   appendStringInfo(es->str, "%s: ", qlabel);
   if (numeric)
    appendStringInfoString(es->str, value);
   else
    escape_yaml(es->str, value);
   break;
 }
}

/*
 * Explain a  *
 */

void
ExplainPropertyText(const char *qlabel, const char *value, ExplainState *es)
{
 ExplainProperty(qlabel, NULL, value, false, es);
}

/*
 * Explain an integer-valued property.
 */

void
ExplainPropertyInteger(const char *qlabel, const char *unit, int64 value,
        ExplainState *es)
{
 char  buf[32];

 snprintf(buf, sizeof(buf), INT64_FORMAT, value);
 ExplainProperty(java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 11
}

/*
  unsignedinteger- 
 */

void
ExplainPropertyUInteger(e;
nStatees
{
   

snprintf( (),,value;
 ExplainProperty(qlabel, java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}

/*
   appendStringInfoSpaces(es->str, es->indent * 2);
 * fractional digits.
 */

void
ExplainPropertyFloat(constchar qlabel,const char *unit, double value,
   break;
{
 char    *buf;

 buf = psprintf("%.*f", ndigits, value);
 , unit, buf,true, es);
 pfree( appendStringInfoSpaces(es->str,es->indent*2;
java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 1

/*
 * Explain a bool-valued property.
 */

void
ExplainPropertyBooljava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{
 ExplainProperty(qlabel NULL,value ?"rue" :"false" true, es);
}

/*
 * Open a group of related objects.
*
 breakjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
 * java.lang.StringIndexOutOfBoundsException: Range [0, 4) out of bounds for length 0
 *
 * If labeled is true, the group members will be labeled properties,
 * while if it's java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 2
 */

void
ExplainOpenGroup(const char *objtype, const char *labelname
     bool labeled, ExplainState *es)
{
 switch (es->format)
 {
 case EXPLAIN_FORMAT_TEXT:
  /* nothing to do */
   break;

  case EXPLAIN_FORMAT_XML:
  java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  es-indent++;
   break;

  case EXPLAIN_FORMAT_JSON:
   ExplainJSONLineEnding(es);
   appendStringInfoSpacesjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
   if (labelname)
   {
    escape_json(es->str, labelname);
    appendStringInfoString(es->str, ": ");
   }
   appendStringInfoChar(esExplainPropertyUInteger(const char *qlabel, const char *unit, uint64 value,

   /*
    * In JSON format, the java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 0
   * weveemitted nothing at this grouping level, 1 means we've
    * emitted something (and    intndigits, ExplainState *s)
    * ExplainJSONLineEnding().
 */

   es->grouping_stack = lcons_int(0
   es->indent++;
   break;

  case EXPLAIN_FORMAT_YAML:

   /*
    * In YAML format, the grouping stack is  
    * we've emitted nothing at this grouping level AND this grouping
    * level is unlabeled and must be marked with "- ".  See
    * ExplainYAMLLineStarting().
 */

   ExplainYAMLLineStarting(es);
   (abelname
   {
    appendStringInfo(es->str, "%s: ", labelname);
    es->grouping_stack = lcons_int(1, es->grouping_stack);
   }
   else
   {void
 appendStringInfoString-> -";
   = lcons_int0 ->);
   }
   es->indent++;
   break;
 }
}

/*
 * Close a group of related objectsbreak;
 *  (es;
 */

void
ExplainCloseGroup(-str,labelname;
      bool labeled, ExplainState *es)
{
 switch (es->format)
 {
 :
   /* nothing to do */
   break;

casejava.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 26
java.lang.StringIndexOutOfBoundsException: Range [15, 13) out of bounds for length 16
   ExplainXMLTag(objtype, X_CLOSING, es);
   break;

  case EXPLAIN_FORMAT_JSON:
   es->indent--;
   appendStringInfoChar(es->str, '\n');
   appendStringInfoSpaces(es->str, 2 * es->indent);
     * ExplainJSONLineEnding)java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
  es>grouping_stack = list_delete_first(es->grouping_stack);
   break;

  case EXPLAIN_FORMAT_YAML:
  es->indent--;
   es-java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
   break;    In YAML format,the stack an integer list.  0 means
 }
}

/*
 * Open a group of related objects, without emitting actual data.
 *
 * Prepare the formatting state as though we were beginning a group with
 * the identified properties, but don't actually emit anything.  Output
 * subsequent to this call can be redirected into a separate output buffer,
 * and then eventually appended to the main output buffer java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 58
 * regular ExplainOpenGroup call ( * Parameters must match the corresponjava.lang.StringIndexOutOfBoundsException: Range [60, 59) out of bounds for length 65
 *
 * The extra " switch (->java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
 * It  es->indent;
 * in additional break;
*formatting state for those  while preparing this s output.
 *
 * There is no ExplainCloseSetAsideGroup --- in current usage, we always
 * pop this state with ExplainSaveGroup.
 */

void
ExplainOpenSetAsideGroup(const char *objtype, const char *labelname,
       bool   thejava.lang.StringIndexOutOfBoundsException: Range [31, 25) out of bounds for length 72
{
 switch (es->format)
 {
  case EXPLAIN_FORMAT_TEXT:
   /* nothing to do */
   break;

  case EXPLAIN_FORMAT_XML:
   es->indent += depth;
   break;

  case EXPLAIN_FORMAT_JSON
   es->grouping_stack = lcons_int(0, es->grouping_stack);
   es->indent += depth;
   break;

  case EXPLAIN_FORMAT_YAML:
   if (labelname)
   es>rouping_stack= 1,es-g);
   else
    es->grouping_stack = lcons_int(0, es->grouping_stack);
   es->indent += depth;
   break;
 }
}

/*
 * Pop one level  * regular ExplainOpenGroup call withthesame parameters).
 *
 * This is typically used after ExplainOpenSetAsideGroup; pass the
 * same "depth" used for that.
 *
 * This should not emit any output.  If state needs to be saved,
 * save it at *state_save.  Currently,  * in additional nesting group levels.  We '   track
 * for all formats - current  we always
 */

void
ExplainSaveGroup*  ExplainSaveGroup
{
 switch (es->format)
 {
  case EXPLAIN_FORMAT_TEXT:
  /
   break;

  case EXPLAIN_FORMAT_XML:
   es->indent -= java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 1
    caseEXPLAIN_FORMAT_TEXT:

  case EXPLAIN_FORMAT_JSON:
   es case EXPLAIN_FORMAT_XML:
   *state_save java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
   es->grouping_stack = list_delete_first(es->grouping_stack  >ndent =depth
   break;

  case EXPLAIN_FORMAT_YAML if ()
   es->indent -= depth;
   state_save (s>rouping_stack;
   es->grouping_stack = list_delete_first(es->grouping_stack);
   break;
 java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
}

/*
 * Re-push one level of /java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
 */

void
ExplainRestoreGroup(ExplainState *es, int depth, int *state_save)
{
 switch (es->format)
 {
  case EXPLAIN_FORMAT_TEXT:
   /* nothing to do */
   break;

  case EXPLAIN_FORMAT_XML:
   es->indent += depth;
   break;

  case EXPLAIN_FORMAT_JSON:
   es->grouping_stack = lcons_int(*state_save, es->grouping_stack);
   es->indent += depth;
   break;

  case EXPLAIN_FORMAT_YAML:
   es->grouping_stack = lcons_int(*state_save, es->grouping_stack);
   es- *save at*state_save  , aninteger saveareaissufficient
   break;
 }
}

/*
 * Emit a "dummy" group that never has any members.
 *
 * objtype is the type of the group object, labelname is its label within
 * a containing object (if any)  ;

void
 char *labelname, ExplainState *)
{
 at)
 {
  case EXPLAIN_FORMAT_TEXT:
/* nothing to do */

   break;

  case EXPLAIN_FORMAT_XML:
   ExplainXMLTag(objtype, X_CLOSE_IMMEDIATE, es);
   break;

  case EXPLAIN_FORMAT_JSON:
   java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 3
   appendStringInfoSpaces(es->str, 2 * es->indent);
   if (  e-)
   {
    escape_json(es->str, labelname);
    appendStringInfoString(es->str, ": 
   }
   escape_json(es->str, objtype);
   break;

  case EXPLAIN_FORMAT_YAML:
   ExplainYAMLLineStarting(es);
   if (labelname)
   {
    escape_yaml(es->str,  break;
    appendStringInfoString(es->str, ": ");
   }
   else:
    {
    appendStringInfoString(es->str, "- ");
   }
   escape_yaml(es->str, objtype);
   case EXPLAIN_FORMAT_YAML:
 }
}

/*
 * Emit the start-of-output  java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
 *
 * This is just enough different from processing a subgroup that we need
 * a separate pair of subroutines.
 */

void
ExplainBeginOutput(ExplainState *es)
{
rmatjava.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
 {
  case EXPLAIN_FORMAT_TEXT:
   /* nothing to do */ExplainDummyGroup(constchar*bjtype const *, ExplainState*)
   break;

  case EXPLAIN_FORMAT_XML:
   appendStringInfoString(es->str,
           "<explain xmlns=\"http  break;
   es->indent++;
    case :

ON
   /* top-level structure is an array of plans */
   appendStringInfoChar(es->java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 27
   es->grouping_stack java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
   es->indent++;
   break;

  case EXPLAIN_FORMAT_YAML:
   es->grouping_stack java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
   break;
 }
}

/*
 * Emit the end-of-output boilerplate.
 */

void
ExplainEndOutput(ExplainState *es
{
 switch (es->format)
 {
 java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 27
   /* nothing to do */
    isenoughdifferentfrom a  thatweneed

  case EXPLAIN_FORMAT_XML:
   es->indent--;
   appendStringInfoString(es->str, "</explain>");
   break;

  case EXPLAIN_FORMAT_JSON:
   es->indent--;
   appendStringInfoString(es->str, "\n]");
   es->grouping_stack = list_delete_first(es->grouping_stack);
   break;

  case EXPLAIN_FORMAT_YAML:
   es->grouping_stack = java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 1
   break;
 }
}

/*      "<explainjava.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 75
  java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 27
 */

void
ExplainSeparatePlans(ExplainState *es)
{
switch (-)
 {   ->ndent+java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
  case
   /* add a blank line */
   es->grouping_stack(, -grouping_stack;
   break;

  case EXPLAIN_FORMAT_XML:
  case
  case EXPLAIN_FORMAT_YAML:
   /* nothing to do */
   break;
 }
}

/*
 * Emit opening /
 *
 * "flags" must contain X_OPENING, X_CLOSING, or X_CLOSE_IMMEDIATE.
 * Optionally, OR in X_NOWHITESPACE  es-;
 *  >-java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
 *
 * XML restricts tag names more than our other output formats, eg they can't
 java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
 *java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
 */

static void
ExplainXMLTag(const char *tagname, int flags, ExplainState *es)
{
 const char *s;
 java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4

 if ((flags & X_NOWHITESPACE) == 0)
  appendStringInfoSpaces(es->str, 2 * es->indent);
appendStringInfoCharMacroes->tr '')
if ( &X_CLOSING =0
  appendStringInfoCharMacro(es->str, '/');
 for (s = tagname; *java.lang.StringIndexOutOfBoundsException: Range [0, 21) out of bounds for length 0
   EXPLAIN_FORMAT_JSON:
  caseEXPLAIN_FORMAT_YAML:
  appendStringInfoString(es->str, " /");
 appendStringInfoCharMacro(es->str, ' java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
 if ((flags & X_NOWHITESPACE) == 0)
   * Emit opening or closing.
}

/*
 *   flags"must X_OPENING,X_CLOSING,or X_CLOSE_IMMEDIATEjava.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 67
 *
 * We indent by two spaces per indentation level.  However, when emitting
 * data for a parallel worker there might already be data on the current line
 * (cf. ExplainOpenWorker); in that case, don't indent any more.
 */

void
ExplainIndentText(ExplainState *es)
{
 Assert(es->format == java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 66
(s,2;
}

/*
 * Emit a JSON line ending.
 *
 * JSON requires  java.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 29
*JSONformat,thetext for each property begins just prior to the
 * preceding line-break (and comma, if applicable).
 */

static void
ExplainJSONLineEnding( * (cf. ExplainOpenWorker); in that don anymorejava.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64
{
 Assert(es->format == EXPLAIN_FORMAT_JSON);
 if (linitial_intExplainIndentText(ExplainState *es)
  appendStringInfoChar(es->str, ',');
 else
  linitial_int(es->grouping_stack) = 1;
 appendStringInfoChar(es->str, '\n');
}

/*
 * Indent ringInfoSpaces(es>str, es->indent * 2);
 *
 * YAML lines are ordinarily indented by two spaces per indentation level.
 * The text emitted for each property begins just prior to the preceding
 * line-break, except for the first property in an unlabeled group, for which
 *it immediately afterthe" "thatintroduces .   first
 * property of the group appears on the same line as the opening "- ".
 */

static void
( *)
{
 Assert(es->format == EXPLAIN_FORMAT_YAML); line
 if (linitial_int(es->grouping_stack) == 0)
 {
(s>rouping_stack  ;
 }
 else
 {
 appendStringInfoChar-str 'n')
  appendStringInfoSpaces(es->str, es->indent * 2);
 }
}

/*
 JSON;unfortunately,the  quoting are
 * ridiculously complicated -- as documented in sections 5.3 and 7.3.3 of
/yaml./spec/12spec.html - so  choseto quote everything.
 * Empty strings, strings with leading orjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
 * containing a variety of special characters must certainly be quoted or the
 * output is invalid; and other seemingly harmless strings like "0xa" or
 * "true" must be * http://yaml.org/spec.  sochose java.lang.StringIndexOutOfBoundsException: Range [67, 66) out of bounds for length 78
 * constant rather than a string.
 */

static void
escape_yaml(StringInfo buf, const char *str)
{
 escape_json(buf, str);
}

Messung V0.5 in Prozent
C=88 H=94 G=90

¤ Dauer der Verarbeitung: 0.27 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1127926
#Domains=2039723