mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			70 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #ifndef GDSDBREADER_H
 | |
| #define GDSDBREADER_H
 | |
| 
 | |
| // This file contains core structures, classes and types for the entire gds app
 | |
| // WARNING: DO NOT MODIFY UNTIL IT'S STRICTLY NECESSARY
 | |
| 
 | |
| #include <QDir>
 | |
| #include "diagramwidget/qgldiagramwidget.h"
 | |
| 
 | |
| #define GDS_DIR "gdsdata"
 | |
| 
 | |
| enum level {LEVEL_ONE, LEVEL_TWO, LEVEL_THREE};
 | |
| 
 | |
| // The internal structure of the db to store information about each node (each level)
 | |
| // this will be serialized before being written to file
 | |
| class dbDataStructure
 | |
| {
 | |
| public:
 | |
|     QString label;
 | |
|     quint32 depth;
 | |
|     quint32 userIndex;
 | |
|     QByteArray data;    // This is COMPRESSED data, optimize ram and disk space, is decompressed
 | |
|                         // just when needed (to display the comments)
 | |
| 
 | |
|     // The following ID is used to create second-third level files
 | |
|     quint64 uniqueID;
 | |
|     // All the next items linked to this one
 | |
|     QVector<dbDataStructure*> nextItems;
 | |
|     // Corresponding indices vector (used to store data)
 | |
|     QVector<quint32> nextItemsIndices;
 | |
|     // The father element (or NULL if it's root)
 | |
|     dbDataStructure* father;
 | |
|     // Corresponding indices vector (used to store data)
 | |
|     quint32 fatherIndex;
 | |
|     bool noFatherRoot; // Used to tell if this node is the root (so hasn't a father)
 | |
| 
 | |
|     // These fields will be useful for levels 2 and 3
 | |
|     QString fileName; // Relative filename for the associated code file
 | |
|     QByteArray firstLineData; // Compressed first line data, this will be used with the line number to retrieve info
 | |
|     QVector<quint32> linesNumbers; // First and next lines (next are relative to the first) numbers
 | |
| 
 | |
|     // -- Generic system data not to be stored on disk
 | |
|     void *glPointer; // GL pointer
 | |
| 
 | |
|     // These operator overrides prevent the glPointer and other non-disk-necessary data serialization
 | |
|     friend QDataStream& operator<<(QDataStream& stream, const dbDataStructure& myclass)
 | |
|     // Notice: this function has to be "friend" because it cannot be a member function, member functions
 | |
|     // have an additional parameter "this" which isn't in the argument list of an operator overload. A friend
 | |
|     // function has full access to private data of the class without having the "this" argument
 | |
|     {
 | |
|         // Don't write glPointer and every pointer-dependent structure
 | |
|         return stream << myclass.label << myclass.depth << myclass.userIndex << qCompress(myclass.data)
 | |
|                          << myclass.uniqueID << myclass.nextItemsIndices << myclass.fatherIndex << myclass.noFatherRoot
 | |
|                             << myclass.fileName << qCompress(myclass.firstLineData) << myclass.linesNumbers;
 | |
|     }
 | |
|     friend QDataStream& operator>>(QDataStream& stream, dbDataStructure& myclass)
 | |
|     {
 | |
|         //Don't read it, either
 | |
|         stream >> myclass.label >> myclass.depth >> myclass.userIndex >> myclass.data
 | |
|                       >> myclass.uniqueID >> myclass.nextItemsIndices >> myclass.fatherIndex >> myclass.noFatherRoot
 | |
|                          >> myclass.fileName >> myclass.firstLineData >> myclass.linesNumbers;
 | |
|         myclass.data = qUncompress(myclass.data);
 | |
|         myclass.firstLineData = qUncompress(myclass.firstLineData);
 | |
|         return stream;
 | |
|     }
 | |
| 
 | |
| };
 | |
| 
 | |
| #endif // GDSDBREADER_H
 |