CmpareMode.h 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. #pragma once
  2. #include <qobject.h>
  3. #include<QVector>
  4. #include<QMap>
  5. #include <QFuture>
  6. #include <functional>
  7. #include "rcglobal.h"
  8. #include "Encode.h"
  9. class BlockUserData;
  10. class QFile;
  11. const int LEFT = 0;
  12. const int RIGHT = 1;
  13. //对比bin二进制文件。
  14. const int MAX_BIN_SIZE = 1024 * 1024 * 10; //最大10M
  15. typedef void(* CALL_FUNC)(void *, uchar *, int);
  16. typedef struct lineFileInfo_ {
  17. qint32 lineNums; //行号码
  18. bool isLcsExist;//是否属于lcsline的一部分
  19. bool isEmptyLine; //是否是空白行,只包含换行符的行
  20. int code; //该行的字符编码
  21. int lineEndFormat; //行尾:见RC_LINE_FORM
  22. QByteArray md4;
  23. QString unicodeStr; //这个是包含行尾的换行符的
  24. lineFileInfo_()
  25. {
  26. isLcsExist = false;
  27. isEmptyLine = false;
  28. code = UNKOWN;
  29. lineEndFormat = UNKNOWN_LINE;
  30. }
  31. }LineFileInfo;
  32. const int EMPTY_FILE = 0;
  33. const int SCAN_SUCCESS = 1;
  34. class CmpareMode;
  35. typedef struct ThreadFileCmpParameter_ {
  36. QString leftPath;
  37. QString rightPath;
  38. CmpareMode *resultCmpObj;
  39. ThreadFileCmpParameter_(QString leftPath_, QString rightPath_)
  40. {
  41. leftPath = leftPath_;
  42. rightPath = rightPath_;
  43. resultCmpObj = nullptr;
  44. }
  45. }ThreadFileCmpParameter;
  46. class CmpareMode :public QObject
  47. {
  48. Q_OBJECT
  49. public:
  50. CmpareMode();
  51. virtual ~CmpareMode();
  52. static CODE_ID readLineFromFile(uchar * m_fileFpr, const int fileLength, const CODE_ID fileCode, QList<LineFileInfo>& lineInfoVec, QList<LineFileInfo>& blankLineInfoVec, int mode, int& maxLineSize);
  53. static CODE_ID judgeFinalTextCode(CODE_ID code, bool isExistUnKownCode, bool isExistGbk, bool isExistUtf8);
  54. static CODE_ID readLineFromFile(uchar * m_fileFpr, const int fileLength, const CODE_ID fileCode, QList<LineFileInfo>& lineInfoVec,int& maxLineSize, int& charsNums, bool &isMaybeHexFile);
  55. static CODE_ID scanFileRealCode(QString filePath);
  56. static CODE_ID scanFileOutPut(CODE_ID code, QString filePath, QList<LineFileInfo>& outputLineInfoVec, int & maxLineSize, int & charsNums, bool &isHexFile);
  57. inline QList<LineFileInfo>* getLeftLineInfo();
  58. inline QList<LineFileInfo>* getRightLineInfo();
  59. void getLines(RC_DIRECTION direction, QList<LineFileInfo>& lines);
  60. void getLinesExternInfo(QList<BlockUserData*>*& leftExternBlockInfo, QList<BlockUserData*>*& rightExternBlockInfo);
  61. private:
  62. static bool recognizeTextCode(QByteArray & text, LineFileInfo & lineInfo, QString & outUnicodeText);
  63. static CODE_ID getTextFileEncodeType(uchar* fileFpr, int fileLength, QString filePath);
  64. quint32 static readLineFromFileWithUnicodeLe(uchar* m_fileFpr, const int fileLength, QList<LineFileInfo>& lineInfoVec, QList<LineFileInfo>& blankLineInfoVec,int mode, int &maxLineSize);
  65. };