mirror of
https://github.com/vishapoberon/vipak.git
synced 2026-04-05 20:42:26 +00:00
HashMapString.Mod sent
This commit is contained in:
parent
d7a574ce89
commit
ab05eb8bd5
1 changed files with 72 additions and 16 deletions
|
|
@ -2,47 +2,57 @@ MODULE HashMap;
|
|||
IMPORT Logger, CharacterStack, Strings;
|
||||
CONST
|
||||
ArrayMaxNumber = 5000;
|
||||
symbolBracketStart = "{";
|
||||
symbolBracketEnd = "}";
|
||||
TYPE
|
||||
TString = ARRAY ArrayMaxNumber OF CHAR;
|
||||
|
||||
JsonTypePointer* = POINTER TO JsonType;
|
||||
|
||||
JsonType* = RECORD
|
||||
GetTerminal* : PROCEDURE(self : JsonTypePointer; string : ARRAY OF CHAR; VAR returnValue : ARRAY OF CHAR);
|
||||
GetTerminal* : PROCEDURE(self : JsonTypePointer; string : ARRAY OF CHAR; VAR returnValue : ARRAY OF CHAR): BOOLEAN;
|
||||
GetNonTerminal* : PROCEDURE(self : JsonTypePointer; key : ARRAY OF CHAR): JsonTypePointer;
|
||||
HasKey* : PROCEDURE(self : JsonTypePointer; key : ARRAY OF CHAR): BOOLEAN;
|
||||
TypeOfTheKey* : PROCEDURE(self : JsonTypePointer; key : ARRAY OF CHAR; VAR returnValue : ARRAY OF CHAR);
|
||||
|
||||
TerminalsValues : ARRAY ArrayMaxNumber OF TString;
|
||||
TerminalKeys : ARRAY ArrayMaxNumber OF TString;
|
||||
TerminalsValues : ARRAY ArrayMaxNumber OF TString;
|
||||
|
||||
NonTerminalValues : POINTER TO ARRAY OF JsonTypePointer;
|
||||
NonTerminalKeys : ARRAY ArrayMaxNumber OF TString;
|
||||
NonTerminalValues : POINTER TO ARRAY OF JsonTypePointer;
|
||||
END;
|
||||
|
||||
VAR
|
||||
jsonRecord :JsonTypePointer;
|
||||
|
||||
|
||||
|
||||
jsonRecord: JsonTypePointer;
|
||||
testValue: ARRAY OF CHAR;
|
||||
keyFound: BOOLEAN;
|
||||
|
||||
PROCEDURE Create*(text: ARRAY OF CHAR): JsonTypePointer;
|
||||
VAR
|
||||
jsonRecord: JsonTypePointer;
|
||||
i,j: INTEGER;
|
||||
self: JsonTypePointer;
|
||||
i,j,k,s: INTEGER;
|
||||
characterStack: CharacterStack.CharacterStackType;
|
||||
key, val: ARRAY ArrayMaxNumber OF CHAR;
|
||||
key, val, string: ARRAY ArrayMaxNumber OF CHAR;
|
||||
symbol: CHAR;
|
||||
symbolStart: CHAR;
|
||||
quoteStart: BOOLEAN;
|
||||
symbolBracketStart, symbolBracketEnd, quote: CHAR;
|
||||
BEGIN
|
||||
NEW(jsonRecord);
|
||||
(* Const *)
|
||||
symbolBracketStart := "{";
|
||||
symbolBracketEnd := "}";
|
||||
(* TODO: Reverse " and ' *)
|
||||
quote := "'";
|
||||
|
||||
NEW(self);
|
||||
NEW(self.NonTerminalValues, ArrayMaxNumber);
|
||||
self.GetTerminal = GetTerminal;
|
||||
|
||||
|
||||
NEW(characterStack);
|
||||
characterStack := CharacterStack.Create();
|
||||
|
||||
i := 0;
|
||||
j := 0;
|
||||
k := 0;
|
||||
|
||||
REPEAT
|
||||
symbol := text[i];
|
||||
|
|
@ -53,14 +63,60 @@ BEGIN
|
|||
IF symbol = symbolBracketStart THEN
|
||||
Logger.Log("End Parsing Json");
|
||||
END;
|
||||
|
||||
IF quoteStart = FALSE & symbol = quote THEN quoteStart = TRUE
|
||||
ELSE IF quoteStart & symbol #= quote THEN characterStack.push(symbol)
|
||||
ELSE IF quoteStart & symbol = quote THEN
|
||||
j := 0;
|
||||
WHILE characterStack.top #= 0AX DO
|
||||
str[j] = characterStack.pop;
|
||||
END;
|
||||
quoteStart := FALSE;
|
||||
ELSE.
|
||||
|
||||
|
||||
IF Strings.Length(string) & quoteStart #= FALSE THEN
|
||||
|
||||
IF Strings.Length(key) #= 0 THEN COPY(string, val)
|
||||
ELSE COPY(string, val) #= 0 END;
|
||||
|
||||
COPY([], string);
|
||||
END;
|
||||
|
||||
IF Strings.Length(key) #= 0 & Strings.Length(val) #= 0 THEN
|
||||
COPY(key, self.TerminalKeys[k]);
|
||||
COPY(val, self.TerminalsValues[k]);
|
||||
INC(k);
|
||||
COPY([], key);
|
||||
COPY([], val);
|
||||
END.
|
||||
|
||||
INC(i);
|
||||
UNTIL i > LEN(text) - 1;
|
||||
(* UNTIL text[i] = 0AX; TODO: Ask Norayr *)
|
||||
|
||||
(* UNTIL text[i] = 0AX; TODO: Ask Norayr *)
|
||||
(* WHY you write AND as & and OR as OR? *)
|
||||
|
||||
RETURN jsonRecord;
|
||||
END Create;
|
||||
|
||||
PROCEDURE *GetTerminal(self: JsonTypePointer, key: ARRAY OF CHAR, VAR returnValue ARRAY OF CHAR): BOOLEAN
|
||||
VAR
|
||||
i: LONGINT;
|
||||
BEGIN
|
||||
FOR i := 0 TO LEN(self.TerminalKeys): DO
|
||||
IF Strings.Match(key, self.TerminalKeys[i]) THEN COPY(self.TerminalsValues[i], val) RETURN TRUE;
|
||||
END
|
||||
RETURN FALSE;
|
||||
END GetTerminal;
|
||||
|
||||
BEGIN
|
||||
NEW(jsonRecord);
|
||||
jsonRecord := Create('{"asdasd": "test"}');
|
||||
jsonRecord := Create("{'asdasd': 'test'}");
|
||||
keyFound := jsonRecord.GetNonTerminal("asdasd", testValue);
|
||||
|
||||
IF keyFound THEN
|
||||
Logger.Log('found KEY');
|
||||
Logger.Log(testValue);
|
||||
ELSE Logger.Log('VAlue for the Key is not found') END;
|
||||
|
||||
END HashMap.
|
||||
Loading…
Add table
Add a link
Reference in a new issue