+++ /dev/null
-
-/*
-==================================================================================
-
- Copyright (c) 2018-2019 AT&T Intellectual Property.
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
-==================================================================================
-*/
-/*
- Author : Ashwin Sridharan
-
-
-*/
-
-#pragma once
-#ifndef JSON_HANDLER
-#define JSON_HANDLER
-
-#include <rapidjson/document.h>
-#include <rapidjson/writer.h>
-#include <rapidjson/stringbuffer.h>
-#include <rapidjson/schema.h>
-#include <iostream>
-#include <unordered_map>
-#include <map>
-#include <stdio.h>
-#include <memory>
-#include <vector>
-#include <mdclog/mdclog.h>
-#include <queue>
-
-
-#define MAX_QUEUE_SIZE 100
-
-using namespace rapidjson;
-
-
-struct DataContainer {
- enum Types {boolean, integer, uinteger, big_integer, ubig_integer, real, str} tag ;
- struct {
- union {
- bool b;
- int i;
- unsigned int ui;
- long int l;
- unsigned long int ul;
- double f;
- } ;
- std::string s;
- } value;
-};
-
-class TrieNode;
-
-class TrieNode{
-public:
-
- TrieNode (int);
- TrieNode( std::string );
-
- void set_type(DataContainer::Types);
- int get_type(void) const {return _val.tag;} ;
-
- void set_value(bool val);
- void set_value(int val);
- void set_value(unsigned int val);
-
- void set_value(long int );
- void set_value(unsigned long int );
- void set_value(double val);
- void set_value(const char *);
- void set_value(std::string val);
- void set_value(const char * , size_t );
-
- void print_id(void);
- void print_value(void);
- void add_child(TrieNode *);
-
- DataContainer const * get_value(void) const { return & _val; };
- DataContainer const * get_id(void) const { return & _id;};
-
- std::vector<TrieNode *> & get_children(void){ return _children;} ;
- std::string & name(void) {return _name; };
- bool is_child(void){ return _children.size() ? false : true; };
-
-private:
- std::vector<TrieNode *> _children;
- int val_type;
- std::string _name;
- DataContainer _id;
- DataContainer _val;
-};
-
-class jsonHandler {
-
-public:
- jsonHandler(void);
-
-
- void load_schema(std::string);
- void load_schema(std::string, TrieNode *root);
- void load_schema(std::string , std::vector<std::string> & );
-
- void load_buffer(std::string);
- void load_buffer(std::string, TrieNode * );
- std::string get_buffer(void);
-
- int get_values(const char *, int , std::string & , TrieNode *, std::vector<TrieNode *> & );
- int get_values( std::string & , TrieNode *, std::vector<TrieNode *> & );
-
- int set_values (const char *, int, std::string & , std::vector<TrieNode *>);
- int set_values (std::string & , std::vector<TrieNode *>);
-
- bool is_valid(const char *, int, std::string &);
-
-private:
-
- void load_file(std::string, std::string &);
-
- bool traverse_doc(Value &, TrieNode *, bool, std::string &, std::vector<TrieNode *> & );
-
- bool find_member(const std::string, std::string &, std::vector<std::string> &, Value & );
-
- bool find_member(const std::string, std::string &, TrieNode *, Value &);
- bool find_member(Value &, std::string &, TrieNode *, Value &);
-
- bool add_array_objects(std::queue<Value> &, Value &);
-
- bool _is_root, _is_schema, _is_buffer;
-
- std::unique_ptr<SchemaDocument> _ref_schema_doc;
- std::map <std::string, DataContainer> _key_value_pairs;
- std::string _contents;
- std::string _buffer;
-
-};
-
-
-#endif