Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/MariaDB/storage/connect/   (MariaDB Server Version 8.1-8.4©)  Datei vom 1.9.2026 mit Größe 7 kB image not shown  

Quelle  bson.h   Sprache: C

 

/**************** bson H Declares Source Code File (.H) ****************/
/*  Name: bson.h   Version 1.0                                         */
/*                                                                     */
/*  (C) Copyright to the author Olivier BERTRAND          2020         */
/*                                                                     */
/*  This file contains the BSON classe declares.                       */
/***********************************************************************/
#pragma once
#include <mysql_com.h>
#include "json.h"
#include "xobject.h"

#if defined(_DEBUG)
#define X  assert(false);
#else
#define X              
#endif

#define ARGS    MY_MIN(24,(int)len-i),s+MY_MAX(i-3,0)

class BDOC;
class BOUT;
class BJSON;

typedef class BDOC* PBDOC;
typedef class BJSON* PBJSON;
typedef uint  OFFSET;

/***********************************************************************/
/* Structure BVAL. Binary representation of a JVALUE.                  */
/***********************************************************************/
typedef struct _jvalue {
 union {
  OFFSET To_Val;    // Offset to a value
  int    N;         // An integer value
  float  F;      // A float value
  bool   B;      // A boolean value True or false (0)
 };
 short    Nd;    // Number of decimals
 short    Type;      // The value type
 OFFSET   Next;      // Offset to the next value in array
} BVAL, *PBVAL;  // end of struct BVALUE

/***********************************************************************/
/* Structure BPAIR. The pairs of a json Object.                        */
/***********************************************************************/
typedef struct _jpair {
 OFFSET Key;    // Offset to this pair key name
 BVAL   Vlp;    // The value of the pair
} BPAIR, *PBPR;  // end of struct BPAIR

char* NextChr(PSZ s, char sep);
char* GetJsonNull(void);
const char* GetFmt(int type, bool un);               

DllExport bool IsNum(PSZ s);

/***********************************************************************/
/* Class BJSON. The class handling all BJSON operations.               */
/***********************************************************************/
class BJSON : public BLOCK {
public:
 // Constructor
 BJSON(PGLOBAL g, PBVAL vp = NULL)
   { G = g, Base = G->Sarea; Bvp = vp; Throw = true; }

 // Utility functions
 inline OFFSET   MOF(void  *p) {return MakeOff(Base, p);}
 inline void     *MP(OFFSET o) {return MakePtr(Base, o);} 
 inline PBPR     MPP(OFFSET o) {return (PBPR)MakePtr(Base, o);}
 inline PBVAL    MVP(OFFSET o) {return (PBVAL)MakePtr(Base, o);}
 inline PSZ      MZP(OFFSET o) {return (PSZ)MakePtr(Base, o);}
 inline longlong LLN(OFFSET o) {return *(longlong*)MakePtr(Base, o);}
 inline double   DBL(OFFSET o) {return *(double*)MakePtr(Base, o);}

 void  Reset(void) {Base = G->Sarea;}
 void* GetBase(void) { return Base; }
 void  SubSet(bool b = false);
 void  MemSave(void) {G->Saved_Size = ((PPOOLHEADER)G->Sarea)->To_Free;}
 void  MemSet(size_t size);
 void  GetMsg(PGLOBAL g) { if (g != G) strcpy(g->Message, G->Message); }

 // SubAlloc functions
 void* BsonSubAlloc(size_t size);
 PBPR  NewPair(OFFSET key, int type = TYPE_NULL);
 OFFSET NewPair(PSZ key, int type = TYPE_NULL)
    {return MOF(NewPair(DupStr(key), type));}
 PBVAL NewVal(int type = TYPE_NULL);
 PBVAL NewVal(PVAL valp);
 PBVAL SubAllocVal(OFFSET toval, int type = TYPE_NULL, short nd = 0);
 PBVAL SubAllocVal(PBVAL toval, int type = TYPE_NULL, short nd = 0)
    {return SubAllocVal(MOF(toval), type, nd);}
 PBVAL SubAllocStr(OFFSET str, short nd = 0);
 PBVAL SubAllocStr(PSZ str, short nd = 0)
    {return SubAllocStr(DupStr(str), nd);}
 PBVAL DupVal(PBVAL bvp);
 OFFSET DupStr(PSZ str) { return MOF(NewStr(str)); }
 PSZ   NewStr(PSZ str);

 // Array functions
 inline PBVAL GetArray(PBVAL vlp) {return MVP(vlp->To_Val);}
 int   GetArraySize(PBVAL bap, bool b = false);
 PBVAL GetArrayValue(PBVAL bap, int i);
  PSZ   GetArrayText(PGLOBAL g, PBVAL bap, PSTRG text);
 void  MergeArray(PBVAL bap1,PBVAL bap2);
 bool  DeleteValue(PBVAL bap, int n);
 void  AddArrayValue(PBVAL bap, OFFSET nvp = 0, int* x = NULL);
 inline void AddArrayValue(PBVAL bap, PBVAL nvp = NULL, int* x = NULL)
    {AddArrayValue(bap, MOF(nvp), x);}
 void  SetArrayValue(PBVAL bap, PBVAL nvp, int n);
 bool  IsArrayNull(PBVAL bap);

 // Object functions
 inline PBPR GetObject(PBVAL bop) {return MPP(bop->To_Val);}
 inline PBPR GetNext(PBPR brp) { return MPP(brp->Vlp.Next); }
 void  SetPairValue(PBPR brp, PBVAL bvp);
 int   GetObjectSize(PBVAL bop, bool b = false);
  PSZ   GetObjectText(PGLOBAL g, PBVAL bop, PSTRG text);
 PBVAL MergeObject(PBVAL bop1, PBVAL bop2);
 PBVAL AddPair(PBVAL bop, PSZ key, int type = TYPE_NULL);
 PSZ   GetKey(PBPR prp) {return prp ? MZP(prp->Key) : NULL;}
 PBVAL GetTo_Val(PBPR prp) {return prp ? MVP(prp->Vlp.To_Val) : NULL;}
 PBVAL GetVlp(PBPR prp) {return prp ? (PBVAL)&prp->Vlp : NULL;}
 PBVAL GetKeyValue(PBVAL bop, PSZ key);
 PBVAL GetKeyList(PBVAL bop);
 PBVAL GetObjectValList(PBVAL bop);
 void  SetKeyValue(PBVAL bop, OFFSET bvp, PSZ key);
 inline void SetKeyValue(PBVAL bop, PBVAL vlp, PSZ key)
    {SetKeyValue(bop, MOF(vlp), key);}
 bool  DeleteKey(PBVAL bop, PCSZ k);
 bool  IsObjectNull(PBVAL bop);

 // Value functions
 int   GetSize(PBVAL vlp, bool b = false);
 PBVAL GetNext(PBVAL vlp) {return MVP(vlp->Next);}
 //PJSON GetJsp(void) { return (DataType == TYPE_JSON ? Jsp : NULL); }
 PSZ   GetValueText(PGLOBAL g, PBVAL vlp, PSTRG text);
 PBVAL GetBson(PBVAL bvp);
 PSZ   GetString(PBVAL vp, char* buff = NULL);
 int   GetInteger(PBVAL vp);
 long long GetBigint(PBVAL vp);
 double GetDouble(PBVAL vp);
 PVAL  GetValue(PGLOBAL g, PBVAL vp);
 void  SetValueObj(PBVAL vlp, PBVAL bop);
 void  SetValueArr(PBVAL vlp, PBVAL bap);
 void  SetValueVal(PBVAL vlp, PBVAL vp);
 PBVAL SetValue(PBVAL vlp, PVAL valp);
 void  SetString(PBVAL vlp, PSZ s, int ci = 0);
 void  SetInteger(PBVAL vlp, int n);
 void  SetBigint(PBVAL vlp, longlong ll);
 void  SetFloat(PBVAL vlp, double f, int nd = -1);
 void  SetFloat(PBVAL vlp, PSZ s);
 void  SetBool(PBVAL vlp, bool b);
 void  Clear(PBVAL vlp) { vlp->N = 0; vlp->Nd = 0; vlp->Next = 0; }
 bool  IsValueNull(PBVAL vlp);
 bool  IsJson(PBVAL vlp) {return vlp ? vlp->Type == TYPE_JAR ||
                                      vlp->Type == TYPE_JOB ||
                                      vlp->Type == TYPE_JVAL : false;}

 // Members
 PGLOBAL G;
 PBVAL   Bvp;
 void   *Base;
 bool    Throw;

protected:
 // Default constructor not to be used
 BJSON(void) = default;
}; // end of class BJSON

/***********************************************************************/
/* Class JDOC. The class for parsing and serializing json documents.   */
/***********************************************************************/
class BDOC : public BJSON {
public:
 BDOC(PGLOBAL G);

 bool  GetComma(void) { return comma; }
 int   GetPretty(void) { return pretty; }
 void  SetPretty(int pty) { pretty = pty; }

 // Methods
 PBVAL ParseJson(PGLOBAL g, char* s, size_t n);
 PSZ   Serialize(PGLOBAL g, PBVAL bvp, char* fn, int pretty);

protected:
 OFFSET ParseArray(size_t& i);
 OFFSET ParseObject(size_t& i);
 PBVAL  ParseValue(size_t& i, PBVAL bvp);
 OFFSET ParseString(size_t& i);
 void   ParseNumeric(size_t& i, PBVAL bvp);
 OFFSET ParseAsArray(size_t& i);
 bool   SerializeArray(OFFSET arp, bool b);
 bool   SerializeObject(OFFSET obp);
 bool   SerializeValue(PBVAL vp, bool b = false);

 // Members used when parsing and serializing
 JOUT* jp;       // Used with serialize
 char* s;       // The Json string to parse
 size_t len;      // The Json string length
 int   pretty;     // The pretty style of the file to parse
 bool  pty[3];     // Used to guess what pretty is
 bool  comma;     // True if Pretty = 1

 // Default constructor not to be used
 BDOC(void) = default;
}; // end of class BDOC

Messung V0.5 in Prozent
C=76 H=100 G=88

¤ Dauer der Verarbeitung: 0.12 Sekunden  (vorverarbeitet am  2026-10-08) ¤

*© 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.