With this library software developers  can access measurements as C++ classes. These classes reflect the message types from the original format. Receiver Date and Receiver Time messages serve an additional role as a starting pair to group related data hierarchically and time-wise. Library provides methods to load and save data as binary “JPS”-formatted stream or as a MySQL database. The use of MySQL database enables user to utilize other tools e.g. database viewers or their own python script with MySQL connector. 
Code-wise the library offers more than 200 classes that represent GREIS messages. Most message classes are derived from "StdMessage" class which stands for the Standard Message. This class offers access to message code, length and it's content as byte array. Although GREIS documentation does not define the Standard Message it was convenient to implement one and make it a base for all other message classes, except a few that does not fall into the code generator pattern. Derived classes may offer additional info, such as time, angular velocities or satellite indices i.e. unique numbers of space vehicles. Currently, such values are accessed as values in an STL vector of specific type. Non-standard messages named CustomType include information such as almanacs. The programmer can access the message data in a similar way. Instances of message classes are organized in a STL vector of an instance of the Epoch class. This class doesn't simply hold a series of messages but  also indicates the epoch time of which all included messages are. For purpose of serialization the library implements DataChunk class with mechanisms to load and save data from MySQL database and binary streams.

Tools

We have created a few utilities that implement the library to help manipulate measurements data formatted in GREIS. They are jps2db, db2jps, jps2jps and jpsdump.
Jpsdump provides user with information on GREIS-formatted file structure. It prints out the epoch information and composition. This can be useful for purposes of investigating into survey data or quick analysis. Options for this tool include: time window definition, decoding of several message types and setting verbosity level. Another feature of this tool is "skypeek". This mode provides measurements values for pseudoranges and carrier phases for all frequencies of each space vehicle tracked.
Jps2jps allows user to manipulate GREIS-formatted files. The basic idea of this tools is reading the source file and conditionally picking some messages to resulting file. It reads the source until it learns the date and time from the respective messages. If the date and time of current epoch fall in conditions the messages of this epoch are passed to resulting file. This method allows to time-window GREIS-formatted files. However, there is a caveat in this method. Because some messages are omitted if their content didn't change cross-epoch we have to hold the respective messages to reinsert them in the first epoch of the resulting file. Meanwhile, the utility enables user to improve compatibility of their files. That is, to offer firmware version information to TEQC processing software we have to construct a ParamsStdMessage instance to place within the first epoch with the following data: rcv/ver/main="3.4.1 Mar,13,2012". The actual version and date fields could be of any value not less than 1.9.0 Jan,15,2010. Another hack enables RTKLIB to properly process the produced files.
Db2jps performs the similar task as jps2jps but the source fileis a database. Jps2db performs the reverse operation by putting data from GREIS-formatted file into the database.

Summary

We hope that the library with tools built upon it will find their way to supplement or enhance other open source GNSS products and projects. Using database instead of files could enable more advanced data handling by both end users and data centers. This software was used in x and y and proved as flexible and efficient way to work with GNSS data.
The library and all the tools, except for the Generator, are written in C++ with some C++14 extensions and Qt, thus are cross-platform, and the Generator is written in C#, but it does require some coding to make it capable of running on Mono. Designed for flexibility and extendability, the library and tools are open for additions and further development.
You may obtain the software and contribute on GitHub repositories https://github.com/iperas/Greistools and https://github.com/iperas/Greis.