[dasher: 9/27] (Untested!) Remove CAlphabet* pointer from UserLog
- From: Patrick Welche <pwelche src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [dasher: 9/27] (Untested!) Remove CAlphabet* pointer from UserLog
- Date: Wed, 18 Aug 2010 15:10:26 +0000 (UTC)
commit 5bea49f474c2181fb0dc8d9c343fdd0994307e97
Author: Alan Lawrence <acl33 inf phy cam ac uk>
Date: Thu Aug 5 20:44:51 2010 +0100
(Untested!) Remove CAlphabet* pointer from UserLog
it was only ever used to reconstruct (via GetText) the text for SymbolProb's
reported in symbol node output; so I've combined SymbolProbDisplay into
SymbolProb, making the nodes provide said text themselves.
(TODO: could add symbol no. and prob (conditionally, #ifdef ?) to CEditEvent
and trap that in UserLog, removing the extra params from Output altogether?)
(TODO: also, I think the calculation of probabilities is broken: it uses
Range() of the node / normalization, ignoring that for symbols inside subgroups
their Range() will be relative to the subgroup, not the previous letter...)
Src/DasherCore/AlphabetManager.cpp | 6 +--
Src/DasherCore/BasicLog.h | 1 -
Src/DasherCore/DasherInterfaceBase.cpp | 9 +----
Src/DasherCore/DasherTypes.h | 16 ++------
Src/DasherCore/UserLog.cpp | 23 +----------
Src/DasherCore/UserLog.h | 4 +-
Src/DasherCore/UserLogBase.h | 1 -
Src/DasherCore/UserLogTrial.cpp | 64 +++++++++++--------------------
Src/DasherCore/UserLogTrial.h | 7 +--
9 files changed, 35 insertions(+), 96 deletions(-)
---
diff --git a/Src/DasherCore/AlphabetManager.cpp b/Src/DasherCore/AlphabetManager.cpp
index 2b06b52..81372de 100644
--- a/Src/DasherCore/AlphabetManager.cpp
+++ b/Src/DasherCore/AlphabetManager.cpp
@@ -428,11 +428,7 @@ void CAlphabetManager::CSymbolNode::Output(Dasher::VECTOR_SYMBOL_PROB* pAdded, i
// Track this symbol and its probability for logging purposes
if (pAdded != NULL) {
- Dasher::SymbolProb sItem;
- sItem.sym = iSymbol;
- sItem.prob = Range() / (double)iNormalization;
-
- pAdded->push_back(sItem);
+ pAdded->push_back(Dasher::SymbolProb(iSymbol, outputText(), Range() / (double)iNormalization));
}
}
diff --git a/Src/DasherCore/BasicLog.h b/Src/DasherCore/BasicLog.h
index a1a89a1..32207fb 100644
--- a/Src/DasherCore/BasicLog.h
+++ b/Src/DasherCore/BasicLog.h
@@ -24,7 +24,6 @@ class CBasicLog : public CUserLogBase {
virtual void AddMouseLocation(int iX, int iY, float dNats) {};
virtual void AddMouseLocationNormalized(int iX, int iY, bool bStoreIntegerRep, float dNats) {};
virtual void OutputFile() {};
- virtual void SetAlphabetPtr(Dasher::CAlphabet* pAlphabet = 0) {};
virtual void InitIsDone() {};
virtual void SetOuputFilename(const string& strFilename = "") {};
virtual int GetLogLevelMask() {return 0;};
diff --git a/Src/DasherCore/DasherInterfaceBase.cpp b/Src/DasherCore/DasherInterfaceBase.cpp
index 1321caa..faf81b0 100644
--- a/Src/DasherCore/DasherInterfaceBase.cpp
+++ b/Src/DasherCore/DasherInterfaceBase.cpp
@@ -159,7 +159,7 @@ void CDasherInterfaceBase::Realize() {
if(iUserLogLevel == 10)
m_pUserLog = new CBasicLog(m_pEventHandler, m_pSettingsStore);
else if (iUserLogLevel > 0)
- m_pUserLog = new CUserLog(m_pEventHandler, m_pSettingsStore, iUserLogLevel, m_Alphabet);
+ m_pUserLog = new CUserLog(m_pEventHandler, m_pSettingsStore, iUserLogLevel);
#else
m_pUserLog = NULL;
#endif
@@ -636,13 +636,6 @@ void CDasherInterfaceBase::ChangeAlphabet() {
CreateNCManager();
-#ifndef _WIN32_WCE
- // Let our user log object know about the new alphabet since
- // it needs to convert symbols into text for the log file.
- if (m_pUserLog != NULL)
- m_pUserLog->SetAlphabetPtr(m_Alphabet);
-#endif
-
// Apply options from alphabet
SetBoolParameter( BP_TRAINING, false );
diff --git a/Src/DasherCore/DasherTypes.h b/Src/DasherCore/DasherTypes.h
index 8deead7..1de308c 100644
--- a/Src/DasherCore/DasherTypes.h
+++ b/Src/DasherCore/DasherTypes.h
@@ -95,23 +95,15 @@ namespace Dasher {
// user logging purposes.
struct SymbolProb
{
+ public:
+ SymbolProb(symbol _sym, const std::string &sDisp, double _prob)
+ : sym(_sym), strDisplay(sDisp), prob(_prob) {}
symbol sym;
- double prob;
- };
-
- // Keeps track of the display text and prob of a past symbol.
- // We need to store this as the alphabet could change in the
- // middle of a trial and we won't be able to convert symbols
- // to text once it does.
- struct SymbolProbDisplay
- {
- symbol sym;
- std::string strDisplay;
+ std::string strDisplay; //easiest to generate at source!
double prob;
};
typedef std::vector<SymbolProb> VECTOR_SYMBOL_PROB;
- typedef std::vector<SymbolProbDisplay> VECTOR_SYMBOL_PROB_DISPLAY;
}
diff --git a/Src/DasherCore/UserLog.cpp b/Src/DasherCore/UserLog.cpp
index 2ee8e3f..ca9cd95 100644
--- a/Src/DasherCore/UserLog.cpp
+++ b/Src/DasherCore/UserLog.cpp
@@ -44,14 +44,12 @@ static UserLogParamMask s_UserLogParamMaskTable [] = {
CUserLog::CUserLog(Dasher::CEventHandler *pEventHandler,
CSettingsStore *pSettingsStore,
- int iLogTypeMask,
- Dasher::CAlphabet* pAlphabet) : CUserLogBase(pEventHandler, pSettingsStore)
+ int iLogTypeMask) : CUserLogBase(pEventHandler, pSettingsStore)
{
//CFunctionLogger f1("CUserLog::CUserLog", g_pLogger);
InitMemberVars();
- m_pAlphabet = pAlphabet;
m_iLevelMask = iLogTypeMask;
InitUsingMask(iLogTypeMask);
@@ -299,13 +297,7 @@ void CUserLog::AddSymbols(Dasher::VECTOR_SYMBOL_PROB* vpNewSymbols, eUserLogEven
return;
}
- if (m_pAlphabet == NULL)
- {
- g_pLogger->Log("CUserLog::AddSymbols, can't do detailed logging of symbols without an alphabet!", logNORMAL);
- return;
- }
-
- pTrial->AddSymbols(vpNewSymbols, iEvent, m_pAlphabet);
+ pTrial->AddSymbols(vpNewSymbols, iEvent);
}
}
@@ -629,16 +621,6 @@ void CUserLog::InitIsDone()
m_bInitIsDone = true;
}
-// Update our pointer to the alphabet we are using, we need th
-// alphabet in order to convert symbols into display strings
-// that we put in the log file.
-void CUserLog::SetAlphabetPtr(Dasher::CAlphabet* pAlphabet)
-{
- //CFunctionLogger f1("CUserLog::SetAlphabetPtr", g_pLogger);
-
- m_pAlphabet = pAlphabet;
-}
-
// Sets our output filename based on the current date and time.
// Or if a parameter is passed in, use that as the output name.
void CUserLog::SetOuputFilename(const string& strFilename)
@@ -736,7 +718,6 @@ void CUserLog::InitMemberVars()
m_bSimple = false;
m_bDetailed = false;
m_pSimpleLogger = NULL;
- m_pAlphabet = NULL;
m_bIsWriting = false;
m_bInitIsDone = false;
m_bNeedToWriteCanvas = false;
diff --git a/Src/DasherCore/UserLog.h b/Src/DasherCore/UserLog.h
index 9df9cb6..f3f07cf 100644
--- a/Src/DasherCore/UserLog.h
+++ b/Src/DasherCore/UserLog.h
@@ -76,7 +76,7 @@ typedef vector<VECTOR_STRING>::iterator VECTOR_VECTOR_STRING_ITER;
class CUserLog : public CUserLogBase
{
public:
- CUserLog(Dasher::CEventHandler *pEventHandler, CSettingsStore *pSettingsStore, int iLogTypeMask, Dasher::CAlphabet* pAlphabet = NULL);
+ CUserLog(Dasher::CEventHandler *pEventHandler, CSettingsStore *pSettingsStore, int iLogTypeMask);
~CUserLog();
@@ -97,7 +97,6 @@ public:
void AddMouseLocation(int iX, int iY, float dNats);
void AddMouseLocationNormalized(int iX, int iY, bool bStoreIntegerRep, float dNats);
void OutputFile();
- void SetAlphabetPtr(Dasher::CAlphabet* pAlphabet);
void InitIsDone();
void SetOuputFilename(const string& strFilename = "");
int GetLogLevelMask();
@@ -118,7 +117,6 @@ protected:
bool m_bSimple; // Are we outputting the simple running log file?
bool m_bDetailed; // Are we outputting per session detailed logs?
CFileLogger* m_pSimpleLogger; // Used to log the simple running log file
- Dasher::CAlphabet* m_pAlphabet; // Pointer to Dasher alphabet object
bool m_bIsWriting; // Has StartWriting() been called but not StopWriting()?
bool m_bInitIsDone; // Set to true once the initialization of default values is done
WindowSize m_sCanvasCoordinates; // The size of our canvas from the last call to AddCanvasSize()
diff --git a/Src/DasherCore/UserLogBase.h b/Src/DasherCore/UserLogBase.h
index 4a7f9ed..cc8c356 100644
--- a/Src/DasherCore/UserLogBase.h
+++ b/Src/DasherCore/UserLogBase.h
@@ -26,7 +26,6 @@ class CUserLogBase : public Dasher::CDasherComponent {
virtual void AddMouseLocation(int iX, int iY, float dNats) = 0;
virtual void AddMouseLocationNormalized(int iX, int iY, bool bStoreIntegerRep, float dNats) = 0;
virtual void OutputFile() = 0;
- virtual void SetAlphabetPtr(Dasher::CAlphabet* pAlphabet = 0) = 0;
virtual void InitIsDone() = 0;
virtual void SetOuputFilename(const std::string& strFilename = "") = 0;
virtual int GetLogLevelMask() = 0;
diff --git a/Src/DasherCore/UserLogTrial.cpp b/Src/DasherCore/UserLogTrial.cpp
index fcdcf36..094d236 100644
--- a/Src/DasherCore/UserLogTrial.cpp
+++ b/Src/DasherCore/UserLogTrial.cpp
@@ -84,7 +84,7 @@ CUserLogTrial::~CUserLogTrial()
pSpan = NULL;
}
- Dasher::VECTOR_SYMBOL_PROB_DISPLAY* pVectorAdded = pLocation->pVectorAdded;
+ Dasher::VECTOR_SYMBOL_PROB* pVectorAdded = pLocation->pVectorAdded;
if (pVectorAdded != NULL)
{
delete pVectorAdded;
@@ -252,24 +252,18 @@ void CUserLogTrial::StopWriting(double dBits)
// The user has entered one or more new symbols. UserLog object will
// pass us the pointer to the current alphabet that is being used.
void CUserLogTrial::AddSymbols(Dasher::VECTOR_SYMBOL_PROB* vpNewSymbolProbs,
- eUserLogEventType iEvent,
- Dasher::CAlphabet* pCurrentAlphabet)
+ eUserLogEventType iEvent)
{
//CFunctionLogger f1("CUserLogTrial::AddSymbols", g_pLogger);
- if (pCurrentAlphabet == NULL)
- {
- g_pLogger->Log("CUserLogTrial::AddSymbols, pCurrentAlphabet was NULL!", logNORMAL);
- return;
- }
if (vpNewSymbolProbs == NULL)
{
g_pLogger->Log("CUserLogTrial::AddSymbols, vectorNewSymbolProbs was NULL!", logNORMAL);
return;
}
- Dasher::VECTOR_SYMBOL_PROB_DISPLAY* pVectorAdded = NULL;
- pVectorAdded = new Dasher::VECTOR_SYMBOL_PROB_DISPLAY;
+ Dasher::VECTOR_SYMBOL_PROB* pVectorAdded = NULL;
+ pVectorAdded = new Dasher::VECTOR_SYMBOL_PROB;
if (pVectorAdded == NULL)
{
@@ -277,26 +271,16 @@ void CUserLogTrial::AddSymbols(Dasher::VECTOR_SYMBOL_PROB* vpNewSymbolProbs,
return;
}
- for (unsigned int i = 0; i < vpNewSymbolProbs->size(); i++)
- {
- Dasher::SymbolProb sNewSymbolProb = (Dasher::SymbolProb) (*vpNewSymbolProbs)[i];
-
- Dasher::SymbolProbDisplay sNewSymbolProbDisplay;
-
- sNewSymbolProbDisplay.sym = sNewSymbolProb.sym;
- sNewSymbolProbDisplay.prob = sNewSymbolProb.prob;
- sNewSymbolProbDisplay.strDisplay = pCurrentAlphabet->GetText(sNewSymbolProb.sym);
-
- pVectorAdded->push_back(sNewSymbolProbDisplay);
-
- // Add this symbol to our running total of symbols.
- // We track the symbols and not the display text
- // since we may need to delete symbols later and
- // a given symbol might take up multiple chars.
- // We also keep the probability around so we can
- // calculate the average bits of the history.
- m_vHistory.push_back(sNewSymbolProbDisplay);
- }
+ // Add the symbols to our running total of symbols.
+
+ // ACL: Old comment said "We track the symbols and not the display text
+ // since we may need to delete symbols later and
+ // a given symbol might take up multiple chars."
+ // - yet stored the display text????
+
+ // We also keep the probability around so we can
+ // calculate the average bits of the history.
+ m_vHistory.insert(m_vHistory.end(), vpNewSymbolProbs->begin(), vpNewSymbolProbs->end());
StopPreviousTimer();
@@ -315,7 +299,7 @@ void CUserLogTrial::AddSymbols(Dasher::VECTOR_SYMBOL_PROB* vpNewSymbolProbs,
pLocation->avgBits = GetHistoryAvgBits();
pLocation->event = iEvent;
pLocation->numDeleted = 0;
- pLocation->pVectorAdded = pVectorAdded;
+ pLocation->pVectorAdded = new std::vector<Dasher::SymbolProb>(*vpNewSymbolProbs);
NavCycle* pCycle = GetCurrentNavCycle();
if (pCycle != NULL)
@@ -559,7 +543,7 @@ string CUserLogTrial::GetHistoryDisplay()
for (unsigned int i = 0; i < m_vHistory.size(); i++)
{
- Dasher::SymbolProbDisplay sItem = (Dasher::SymbolProbDisplay) m_vHistory[i];
+ Dasher::SymbolProb sItem = (Dasher::SymbolProb) m_vHistory[i];
strResult += sItem.strDisplay;
}
@@ -576,7 +560,7 @@ double CUserLogTrial::GetHistoryAvgBits()
{
for (unsigned int i = 0; i < m_vHistory.size(); i++)
{
- Dasher::SymbolProbDisplay sItem = (Dasher::SymbolProbDisplay) m_vHistory[i];
+ Dasher::SymbolProb sItem = (Dasher::SymbolProb) m_vHistory[i];
dResult += log(sItem.prob);
}
@@ -646,14 +630,14 @@ string CUserLogTrial::GetLocationXML(NavLocation* pLocation, const string& strPr
strResult += m_szTempBuffer;
strResult += "</NumAdded>\n";
- Dasher::VECTOR_SYMBOL_PROB_DISPLAY* pVectorAdded = pLocation->pVectorAdded;
+ Dasher::VECTOR_SYMBOL_PROB* pVectorAdded = pLocation->pVectorAdded;
if (pVectorAdded != NULL)
{
// Output the details of each add
for (unsigned int j = 0; j < pVectorAdded->size(); j++)
{
- Dasher::SymbolProbDisplay sItem = (Dasher::SymbolProbDisplay) (*pVectorAdded)[j];
+ Dasher::SymbolProb sItem = (Dasher::SymbolProb) (*pVectorAdded)[j];
strResult += strPrefix;
strResult += "\t<Add>\n";
@@ -1261,15 +1245,13 @@ CUserLogTrial::CUserLogTrial(const string& strXML, int iIgnored)
// Handle the multiple <Add> tags that might exist
vAdded = XMLUtil::GetElementStrings("Add", *iter2);
- pLocation->pVectorAdded = new Dasher::VECTOR_SYMBOL_PROB_DISPLAY;
+ pLocation->pVectorAdded = new Dasher::VECTOR_SYMBOL_PROB;
for (VECTOR_STRING_ITER iter3 = vAdded.begin(); iter3 < vAdded.end(); iter3++)
{
- Dasher::SymbolProbDisplay sAdd;
-
- sAdd.prob = XMLUtil::GetElementFloat("Prob", *iter3);
- sAdd.strDisplay = XMLUtil::GetElementString("Text", *iter3);
- sAdd.sym = 0; // We don't have the original integer symbol index
+ Dasher::SymbolProb sAdd(0, // We don't have the original integer symbol index
+ XMLUtil::GetElementString("Text", *iter3),
+ XMLUtil::GetElementFloat("Prob", *iter3));
if (pLocation->pVectorAdded != NULL)
pLocation->pVectorAdded->push_back(sAdd);
diff --git a/Src/DasherCore/UserLogTrial.h b/Src/DasherCore/UserLogTrial.h
index 2fe8593..1230858 100644
--- a/Src/DasherCore/UserLogTrial.h
+++ b/Src/DasherCore/UserLogTrial.h
@@ -15,7 +15,6 @@
#include "TimeSpan.h"
#include "UserButton.h"
#include "UserLocation.h"
-#include "Alphabet/Alphabet.h"
#include "DasherTypes.h"
#include "UserLogParam.h"
#include <algorithm>
@@ -56,7 +55,7 @@ struct NavLocation
CTimeSpan* span; // Track the time between this update and the one that comes next
eUserLogEventType event; // What triggered the adding or deleting of symbols
int numDeleted; // How many symbols deleted (0 if it is an AddSymbols() call)
- Dasher::VECTOR_SYMBOL_PROB_DISPLAY* pVectorAdded; // Info on all added symbols
+ Dasher::VECTOR_SYMBOL_PROB* pVectorAdded; // Info on all added symbols
double avgBits; // Average bits required to write this history (assuming no errors)
};
@@ -96,7 +95,7 @@ public:
bool HasWritingOccured();
void StartWriting();
void StopWriting(double dBits);
- void AddSymbols(Dasher::VECTOR_SYMBOL_PROB* vpNewSymbolProbs, eUserLogEventType iEvent, Dasher::CAlphabet* pCurrentAlphabet);
+ void AddSymbols(Dasher::VECTOR_SYMBOL_PROB* vpNewSymbolProbs, eUserLogEventType iEvent);
void DeleteSymbols(int iNumToDelete, eUserLogEventType iEvent);
string GetXML(const string& strPrefix = "");
void Done();
@@ -126,7 +125,7 @@ protected:
string m_strCurrentTrial; // Stores information passed to us from the UserTrial app
WindowSize m_sWindowCoordinates; // Records the window coordinates at the start of navigation
WindowSize m_sCanvasCoordinates; // The size of our canvas during navigation
- Dasher::VECTOR_SYMBOL_PROB_DISPLAY m_vHistory; // Tracks all the symbols, probs, display text entererd during this trial
+ Dasher::VECTOR_SYMBOL_PROB m_vHistory; // Tracks all the symbols, probs, display text entererd during this trial
VECTOR_USER_LOG_PARAM_PTR m_vpParams; // Stores general parameters we want stored in each trial tag in the XML
VECTOR_NAV_CYCLE_PTR m_vpNavCycles;
string m_strCurrentTrialFilename; // Where to look for info on the current subject's trial
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]