首页 > 其他分享 >Cpp serialize class in vector collection and define the serialize method in class via jsoncpp

Cpp serialize class in vector collection and define the serialize method in class via jsoncpp

时间:2022-12-03 19:44:29浏览次数:33  
标签:Util via int serialize free char include root class

//Model/Book.cpp
#include <iostream>
#include <jsoncpp/json/json.h>

using namespace std;
class Book
{
public:
    int Idx;
    double Id;
    char *Abstract;
    char *Author;
    char *Comment;
    char *Content;
    char* ISBN;
    char *Name;
    char *Title;
    char *Topic;

    void serializeBook(Json::Value &root)
    {
        root["Idx"]=Idx;
        root["Id"]=Id;
        root["Abstract"]=Abstract;
        root["Author"]=Author;
        root["Comment"]=Comment;
        root["Content"]=Content;
        root["ISBN"]=ISBN;
        root["Name"]=Name;
        root["Title"]=Title;
        root["Topic"]=Topic;
        free(Abstract);
        free(Author);
        free(Comment);
        free(Content);
        free(ISBN);
        free(Name);
        free(Title);
        free(Topic);
    }
};
//Model/Util.h
#include <chrono>
#include <ctime>
#include <dirent.h>
#include <fstream>
#include <iostream>
#include <thread>
#include <unistd.h>
#include <uuid/uuid.h>
#include <vector>
#include "Model/Book.cpp"

using namespace std;

class Util
{
public:
    static char* uuidValue;
    static char* dtValue;
    static uint64_t readNum;
    char* getTimeNow();
    char* getUuid();
    void getBookVector(vector<Book> &vec,int len);
    void serializeVector(int len);
}
//Model/Util.cpp
#include "Model/Util.h"

char* Util::dtValue=(char*)malloc(20);
char* Util::uuidValue=(char*)malloc(40);
uint64_t Util::readNum=0;

char *Util::getTimeNow()
{
    time_t rawTime=time(nullptr);
    struct tm tmInfo=*localtime(&rawTime);
    strftime(dtValue,20,"%Y%m%d%H%M%S",&tmInfo);
    return dtValue;
}

char *Util::getUuid()
{
    uuid_t newUUID;
    uuid_generate(newUUID);
    uuid_unparse(newUUID,uuidValue);
    return uuidValue;
}

void Util::getBookVector(vector<Book> &vec,int len)
{
    for(int i=0;i<len;i++)
    {
        Book bk;
        bk.Idx=i;
        bk.Id=(double)i*i*i*i*i;
        bk.Abstract=(char*)malloc(40);
        bk.Author=(char*)malloc(40);
        bk.Comment=(char*)malloc(40);
        bk.Content=(char*)malloc(40);
        bk.ISBN=(char*)malloc(40);
        bk.Name=(char*)malloc(40);
        bk.Title=(char*)malloc(40);
        bk.Topic=(char*)malloc(40);
        strcpy(bk.Abstract,getUuid());
        strcpy(bk.Author,getUuid());
        strcpy(bk.Comment,getUuid());
        strcpy(bk.Content,getUuid());
        strcpy(bk.ISBN,getUuid());
        strcpy(bk.Name,getUuid());
        strcpy(bk.Title,getUuid());
        strcpy(bk.Topic,getUuid());
        vec.push_back(bk);
    }
}

void Util::logFileMsg(string fileName,string msg)
{
    fstream wFile(fileName,ios::app);
    if(!wFile.is_open())
    {
        cout<<"Create or open "<<fileName<<" failed!"<<endl;
        return;
    }

    wFile<<msg<<endl;
    wFile.close();
    cout<<getTimeNow()<<",writing into "<<fileName<<" finished!"<<endl;
}

void Util::serializeVector(int len)
{
    chrono::time_point<chrono::high_resolution_clock> startTime,endTime;
    startTime=chrono::high_resolution_clock::now();
    vector<Book> vec;
    getBookVector(std::ref(vec),len);
    
    Json::Value root;
    for (auto &bk : vec)
    {
        Json::Value jsonBk;
        bk.serializeBook(std::ref(jsonBk));
        root.append(jsonBk);
    }

    Json::StyledWriter styledWriter;
    string jsonValue=styledWriter.write(root);  

    string fileName=getTimeNow();
    fileName=fileName.append(".txt");
    logFileMsg(fileName,jsonValue);
    endTime=chrono::high_resolution_clock::now();
    cout<<getTimeNow()<<",finished in "<<__FUNCTION__<<endl;
    cout<<len<<", serizlization time cost :"
    <<chrono::duration_cast<chrono::seconds>(endTime-startTime).count()<<" seconds,"
    <<chrono::duration_cast<chrono::milliseconds>(endTime-startTime).count()<<" mills,"
    <<chrono::duration_cast<chrono::microseconds>(endTime-startTime).count()<<" micros,"
    <<chrono::duration_cast<chrono::nanoseconds>(endTime-startTime).count()<<" nanos!!!"<<endl<<endl;
}

 

//main.cpp
#include "Model/Util.h"

int main(int args, char **argv)
{
    Util ul;
    ul.serializeVector(atoi(argv[1]));
    cout << "Finished in " << __FUNCTION__ << "," << __LINE__ << endl;
}

 

 

Compile via g++

g++ -g -std=c++2a -I. *.cpp ./Model/*.cpp -o h1 -ljsoncpp -luuid

Run

./h1 10000

 

 

 

标签:Util,via,int,serialize,free,char,include,root,class
From: https://www.cnblogs.com/Fred1987/p/16948648.html

相关文章