2 #if defined(_MFC_VER)
\r
5 #define GIT_HASH_SIZE 20
\r
10 unsigned char m_hash[GIT_HASH_SIZE];
\r
14 memset(m_hash,0, GIT_HASH_SIZE);
\r
18 memcpy(m_hash,p,GIT_HASH_SIZE);
\r
20 CGitHash & operator = (CString &str)
\r
26 CGitHash(CString &str)
\r
28 for(int i=0;i<GIT_HASH_SIZE;i++)
\r
32 for(int j=2*i;j<=2*i+1;j++)
\r
37 if(ch >= _T('0') && ch <= _T('9'))
\r
38 a |= (ch - _T('0'))&0xF;
\r
39 else if(ch >=_T('A') && ch <= _T('F'))
\r
40 a |= ((ch - _T('A'))&0xF) + 10 ;
\r
41 else if(ch >=_T('a') && ch <= _T('f'))
\r
42 a |= ((ch - _T('a'))&0xF) + 10;
\r
50 memset(m_hash,0, GIT_HASH_SIZE);
\r
54 for(int i=0;i<GIT_HASH_SIZE;i++)
\r
66 for(int i=0;i<GIT_HASH_SIZE;i++)
\r
68 a.Format(_T("%02x"),m_hash[i]);
\r
78 bool operator == (const CGitHash &hash)
\r
80 return memcmp(m_hash,hash.m_hash,GIT_HASH_SIZE) == 0;
\r
84 friend bool operator<(const CGitHash& left, const CGitHash& right)
\r
86 return memcmp(left.m_hash,right.m_hash,GIT_HASH_SIZE) < 0;
\r
89 friend bool operator>(const CGitHash& left, const CGitHash& right)
\r
91 return memcmp(left.m_hash, right.m_hash, GIT_HASH_SIZE) > 0;
\r
94 friend bool operator != (const CGitHash& left, const CGitHash& right)
\r
96 return memcmp(left.m_hash, right.m_hash, GIT_HASH_SIZE) != 0;
\r
98 #if defined(_MFC_VER)
\r
99 friend CArchive& AFXAPI operator<<(CArchive& ar, CGitHash& hash)
\r
101 for(int i=0;i<GIT_HASH_SIZE;i++)
\r
102 ar<<hash.m_hash[i];
\r
105 friend CArchive& AFXAPI operator>>(CArchive& ar, CGitHash& hash)
\r
107 for(int i=0;i<GIT_HASH_SIZE;i++)
\r
108 ar>>hash.m_hash[i];
\r