18
for (unsigned i = 0; i < m_uCount; ++i)
26
float DistFunc::GetDist(unsigned uIndex1, unsigned uIndex2) const
28
return m_Dists[VectorIndex(uIndex1, uIndex2)];
31
unsigned DistFunc::GetCount() const
36
void DistFunc::SetCount(unsigned uCount)
39
if (uCount <= m_uCacheCount)
42
m_Dists = new float[VectorLength()];
43
m_Names = new char *[m_uCount];
44
m_Ids = new unsigned[m_uCount];
45
m_uCacheCount = uCount;
47
memset(m_Names, 0, m_uCount*sizeof(char *));
48
memset(m_Ids, 0xff, m_uCount*sizeof(unsigned));
49
memset(m_Dists, 0, VectorLength()*sizeof(float));
52
void DistFunc::SetDist(unsigned uIndex1, unsigned uIndex2, float dDist)
54
m_Dists[VectorIndex(uIndex1, uIndex2)] = dDist;
55
m_Dists[VectorIndex(uIndex2, uIndex1)] = dDist;
58
unsigned DistFunc::VectorIndex(unsigned uIndex1, unsigned uIndex2) const
60
assert(uIndex1 < m_uCount && uIndex2 < m_uCount);
61
return uIndex1*m_uCount + uIndex2;
64
unsigned DistFunc::VectorLength() const
66
return m_uCount*m_uCount;
69
void DistFunc::SetName(unsigned uIndex, const char szName[])
71
assert(uIndex < m_uCount);
72
m_Names[uIndex] = strsave(szName);
75
void DistFunc::SetId(unsigned uIndex, unsigned uId)
77
assert(uIndex < m_uCount);
81
const char *DistFunc::GetName(unsigned uIndex) const
83
assert(uIndex < m_uCount);
84
return m_Names[uIndex];
87
unsigned DistFunc::GetId(unsigned uIndex) const
89
assert(uIndex < m_uCount);
93
void DistFunc::LogMe() const
95
Log("DistFunc::LogMe count=%u\n", m_uCount);
97
for (unsigned i = 0; i < m_uCount; ++i)
102
for (unsigned i = 0; i < m_uCount; ++i)
103
Log(" %7.7s", m_Names[i] ? m_Names[i] : "");
106
for (unsigned i = 0; i < m_uCount; ++i)
108
Log("%4u %10.10s : ", i, m_Names[i] ? m_Names[i] : "");
109
for (unsigned j = 0; j <= i; ++j)
110
Log(" %7.4g", GetDist(i, j));