Remove all the "using namespace" usage

This commit is contained in:
Lukhnos Liu 2022-02-19 09:35:48 -08:00
parent d3302ef70a
commit 13609f41f5
11 changed files with 158 additions and 148 deletions

View File

@ -46,8 +46,8 @@ class Bigram {
bool operator<(const Bigram& inAnother) const;
};
inline ostream& operator<<(ostream& inStream, const Bigram& inGram) {
streamsize p = inStream.precision();
inline std::ostream& operator<<(std::ostream& inStream, const Bigram& inGram) {
std::streamsize p = inStream.precision();
inStream.precision(6);
inStream << "(" << inGram.keyValue << "|" << inGram.preceedingKeyValue << ","
<< inGram.score << ")";
@ -55,13 +55,14 @@ inline ostream& operator<<(ostream& inStream, const Bigram& inGram) {
return inStream;
}
inline ostream& operator<<(ostream& inStream, const vector<Bigram>& inGrams) {
inline std::ostream& operator<<(std::ostream& inStream,
const std::vector<Bigram>& inGrams) {
inStream << "[" << inGrams.size() << "]=>{";
size_t index = 0;
for (vector<Bigram>::const_iterator gi = inGrams.begin(); gi != inGrams.end();
++gi, ++index) {
for (std::vector<Bigram>::const_iterator gi = inGrams.begin();
gi != inGrams.end(); ++gi, ++index) {
inStream << index << "=>";
inStream << *gi;
if (gi + 1 != inGrams.end()) {

View File

@ -35,7 +35,6 @@
namespace Formosa {
namespace Gramambular {
using namespace std;
class BlockReadingBuilder {
public:
@ -45,35 +44,35 @@ class BlockReadingBuilder {
size_t length() const;
size_t cursorIndex() const;
void setCursorIndex(size_t inNewIndex);
void insertReadingAtCursor(const string& inReading);
void insertReadingAtCursor(const std::string& inReading);
bool deleteReadingBeforeCursor(); // backspace
bool deleteReadingAfterCursor(); // delete
bool removeHeadReadings(size_t count);
void setJoinSeparator(const string& separator);
const string joinSeparator() const;
void setJoinSeparator(const std::string& separator);
const std::string joinSeparator() const;
vector<string> readings() const;
std::vector<std::string> readings() const;
Grid& grid();
protected:
void build();
static const string Join(vector<string>::const_iterator begin,
vector<string>::const_iterator end,
const string& separator);
static const std::string Join(std::vector<std::string>::const_iterator begin,
std::vector<std::string>::const_iterator end,
const std::string& separator);
//最多使用六個字組成一個詞
static const size_t MaximumBuildSpanLength = 6;
size_t m_cursorIndex;
vector<string> m_readings;
std::vector<std::string> m_readings;
Grid m_grid;
LanguageModel* m_LM;
string m_joinSeparator;
std::string m_joinSeparator;
};
inline BlockReadingBuilder::BlockReadingBuilder(LanguageModel* inLM)
@ -95,7 +94,7 @@ inline void BlockReadingBuilder::setCursorIndex(size_t inNewIndex) {
}
inline void BlockReadingBuilder::insertReadingAtCursor(
const string& inReading) {
const std::string& inReading) {
m_readings.insert(m_readings.begin() + m_cursorIndex, inReading);
m_grid.expandGridByOneAtLocation(m_cursorIndex);
@ -103,7 +102,7 @@ inline void BlockReadingBuilder::insertReadingAtCursor(
m_cursorIndex++;
}
inline vector<string> BlockReadingBuilder::readings() const {
inline std::vector<std::string> BlockReadingBuilder::readings() const {
return m_readings;
}
@ -149,11 +148,12 @@ inline bool BlockReadingBuilder::removeHeadReadings(size_t count) {
return true;
}
inline void BlockReadingBuilder::setJoinSeparator(const string& separator) {
inline void BlockReadingBuilder::setJoinSeparator(
const std::string& separator) {
m_joinSeparator = separator;
}
inline const string BlockReadingBuilder::joinSeparator() const {
inline const std::string BlockReadingBuilder::joinSeparator() const {
return m_joinSeparator;
}
@ -179,14 +179,14 @@ inline void BlockReadingBuilder::build() {
for (size_t p = begin; p < end; p++) {
for (size_t q = 1; q <= MaximumBuildSpanLength && p + q <= end; q++) {
string combinedReading = Join(
std::string combinedReading = Join(
m_readings.begin() + p, m_readings.begin() + p + q, m_joinSeparator);
if (!m_grid.hasNodeAtLocationSpanningLengthMatchingKey(p, q,
combinedReading)) {
vector<Unigram> unigrams = m_LM->unigramsForKey(combinedReading);
std::vector<Unigram> unigrams = m_LM->unigramsForKey(combinedReading);
if (unigrams.size() > 0) {
Node n(combinedReading, unigrams, vector<Bigram>());
Node n(combinedReading, unigrams, std::vector<Bigram>());
m_grid.insertNode(n, p, q);
}
}
@ -194,11 +194,12 @@ inline void BlockReadingBuilder::build() {
}
}
inline const string BlockReadingBuilder::Join(
vector<string>::const_iterator begin, vector<string>::const_iterator end,
const string& separator) {
string result;
for (vector<string>::const_iterator iter = begin; iter != end;) {
inline const std::string BlockReadingBuilder::Join(
std::vector<std::string>::const_iterator begin,
std::vector<std::string>::const_iterator end,
const std::string& separator) {
std::string result;
for (std::vector<std::string>::const_iterator iter = begin; iter != end;) {
result += *iter;
++iter;
if (iter != end) {

View File

@ -31,6 +31,9 @@
#include "Gramambular.h"
#include "gtest/gtest.h"
namespace Formosa {
namespace Gramambular {
const char* SampleData = R"(
#
# The sample is from libtabe (http://sourceforge.net/projects/libtabe/)
@ -120,25 +123,22 @@ const char* SampleData = R"(
ˋ -9.842421
)";
using namespace std;
using namespace Formosa::Gramambular;
class SimpleLM : public LanguageModel {
public:
SimpleLM(const char* input, bool swapKeyValue = false) {
stringstream sstream(input);
std::stringstream sstream(input);
while (sstream.good()) {
string line;
std::string line;
getline(sstream, line);
if (!line.size() || (line.size() && line[0] == '#')) {
continue;
}
stringstream linestream(line);
string col0;
string col1;
string col2;
std::stringstream linestream(line);
std::string col0;
std::string col1;
std::string col2;
linestream >> col0;
linestream >> col1;
linestream >> col2;
@ -159,23 +159,25 @@ class SimpleLM : public LanguageModel {
}
}
const vector<Bigram> bigramsForKeys(const string& preceedingKey,
const string& key) override {
return vector<Bigram>();
const std::vector<Bigram> bigramsForKeys(const std::string& preceedingKey,
const std::string& key) override {
return std::vector<Bigram>();
}
const vector<Unigram> unigramsForKey(const string& key) override {
map<string, vector<Unigram> >::const_iterator f = m_db.find(key);
return f == m_db.end() ? vector<Unigram>() : (*f).second;
const std::vector<Unigram> unigramsForKey(const std::string& key) override {
std::map<std::string, std::vector<Unigram> >::const_iterator f =
m_db.find(key);
return f == m_db.end() ? std::vector<Unigram>() : (*f).second;
}
bool hasUnigramsForKey(const string& key) override {
map<string, vector<Unigram> >::const_iterator f = m_db.find(key);
bool hasUnigramsForKey(const std::string& key) override {
std::map<std::string, std::vector<Unigram> >::const_iterator f =
m_db.find(key);
return f != m_db.end();
}
protected:
map<string, vector<Unigram> > m_db;
std::map<std::string, std::vector<Unigram> > m_db;
};
TEST(GramambularTest, InputTest) {
@ -200,15 +202,17 @@ TEST(GramambularTest, InputTest) {
Walker walker(&builder.grid());
vector<NodeAnchor> walked = walker.reverseWalk(builder.grid().width(), 0.0);
std::vector<NodeAnchor> walked =
walker.reverseWalk(builder.grid().width(), 0.0);
reverse(walked.begin(), walked.end());
vector<string> composed;
for (vector<NodeAnchor>::iterator wi = walked.begin(); wi != walked.end();
++wi) {
std::vector<std::string> composed;
for (std::vector<NodeAnchor>::iterator wi = walked.begin();
wi != walked.end(); ++wi) {
composed.push_back((*wi).node->currentKeyValue().value);
}
ASSERT_EQ(composed, (vector<string>{"高科技", "公司", "", "年中", "獎金"}));
ASSERT_EQ(composed,
(std::vector<std::string>{"高科技", "公司", "", "年中", "獎金"}));
}
TEST(GramambularTest, WordSegmentationTest) {
@ -226,14 +230,18 @@ TEST(GramambularTest, WordSegmentationTest) {
builder2.insertReadingAtCursor("");
Walker walker2(&builder2.grid());
vector<NodeAnchor> walked = walker2.reverseWalk(builder2.grid().width(), 0.0);
std::vector<NodeAnchor> walked =
walker2.reverseWalk(builder2.grid().width(), 0.0);
reverse(walked.begin(), walked.end());
vector<string> segmented;
for (vector<NodeAnchor>::iterator wi = walked.begin(); wi != walked.end();
++wi) {
std::vector<std::string> segmented;
for (std::vector<NodeAnchor>::iterator wi = walked.begin();
wi != walked.end(); ++wi) {
segmented.push_back((*wi).node->currentKeyValue().key);
}
ASSERT_EQ(segmented,
(vector<string>{"高科技", "公司", "", "年終", "獎金"}));
(std::vector<std::string>{"高科技", "公司", "", "年終", "獎金"}));
}
} // namespace Gramambular
} // namespace Formosa

View File

@ -43,34 +43,35 @@ class Grid {
size_t inSpanningLength);
bool hasNodeAtLocationSpanningLengthMatchingKey(size_t inLocation,
size_t inSpanningLength,
const string& inKey);
const std::string& inKey);
void expandGridByOneAtLocation(size_t inLocation);
void shrinkGridByOneAtLocation(size_t inLocation);
size_t width() const;
vector<NodeAnchor> nodesEndingAt(size_t inLocation);
vector<NodeAnchor> nodesCrossingOrEndingAt(size_t inLocation);
std::vector<NodeAnchor> nodesEndingAt(size_t inLocation);
std::vector<NodeAnchor> nodesCrossingOrEndingAt(size_t inLocation);
// "Freeze" the node with the unigram that represents the selected candidate
// value. After this, the node that contains the unigram will always be
// evaluated to that unigram, while all other overlapping nodes will be reset
// to their initial state (that is, if any of those nodes were "frozen" or
// fixed, they will be unfrozen.)
NodeAnchor fixNodeSelectedCandidate(size_t location, const string& value);
NodeAnchor fixNodeSelectedCandidate(size_t location,
const std::string& value);
// Similar to fixNodeSelectedCandidate, but instead of "freezing" the node,
// only boost the unigram that represents the value with an overriding score.
// This has the same side effect as fixNodeSelectedCandidate, which is that
// all other overlapping nodes will be reset to their initial state.
void overrideNodeScoreForSelectedCandidate(size_t location,
const string& value,
const std::string& value,
float overridingScore);
const string dumpDOT();
const std::string dumpDOT();
protected:
vector<Span> m_spans;
std::vector<Span> m_spans;
};
inline void Grid::clear() { m_spans.clear(); }
@ -89,7 +90,7 @@ inline void Grid::insertNode(const Node& inNode, size_t inLocation,
}
inline bool Grid::hasNodeAtLocationSpanningLengthMatchingKey(
size_t inLocation, size_t inSpanningLength, const string& inKey) {
size_t inLocation, size_t inSpanningLength, const std::string& inKey) {
if (inLocation > m_spans.size()) {
return false;
}
@ -128,8 +129,8 @@ inline void Grid::shrinkGridByOneAtLocation(size_t inLocation) {
inline size_t Grid::width() const { return m_spans.size(); }
inline vector<NodeAnchor> Grid::nodesEndingAt(size_t inLocation) {
vector<NodeAnchor> result;
inline std::vector<NodeAnchor> Grid::nodesEndingAt(size_t inLocation) {
std::vector<NodeAnchor> result;
if (m_spans.size() && inLocation <= m_spans.size()) {
for (size_t i = 0; i < inLocation; i++) {
@ -151,8 +152,9 @@ inline vector<NodeAnchor> Grid::nodesEndingAt(size_t inLocation) {
return result;
}
inline vector<NodeAnchor> Grid::nodesCrossingOrEndingAt(size_t inLocation) {
vector<NodeAnchor> result;
inline std::vector<NodeAnchor> Grid::nodesCrossingOrEndingAt(
size_t inLocation) {
std::vector<NodeAnchor> result;
if (m_spans.size() && inLocation <= m_spans.size()) {
for (size_t i = 0; i < inLocation; i++) {
@ -184,8 +186,8 @@ inline vector<NodeAnchor> Grid::nodesCrossingOrEndingAt(size_t inLocation) {
// For nodes found at the location, fix their currently-selected candidate using
// the supplied string value.
inline NodeAnchor Grid::fixNodeSelectedCandidate(size_t location,
const string& value) {
vector<NodeAnchor> nodes = nodesCrossingOrEndingAt(location);
const std::string& value) {
std::vector<NodeAnchor> nodes = nodesCrossingOrEndingAt(location);
NodeAnchor node;
for (auto nodeAnchor : nodes) {
auto candidates = nodeAnchor.node->candidates();
@ -205,10 +207,9 @@ inline NodeAnchor Grid::fixNodeSelectedCandidate(size_t location,
return node;
}
inline void Grid::overrideNodeScoreForSelectedCandidate(size_t location,
const string& value,
float overridingScore) {
vector<NodeAnchor> nodes = nodesCrossingOrEndingAt(location);
inline void Grid::overrideNodeScoreForSelectedCandidate(
size_t location, const std::string& value, float overridingScore) {
std::vector<NodeAnchor> nodes = nodesCrossingOrEndingAt(location);
for (auto nodeAnchor : nodes) {
auto candidates = nodeAnchor.node->candidates();
@ -225,11 +226,11 @@ inline void Grid::overrideNodeScoreForSelectedCandidate(size_t location,
}
}
inline const string Grid::dumpDOT() {
stringstream sst;
sst << "digraph {" << endl;
sst << "graph [ rankdir=LR ];" << endl;
sst << "BOS;" << endl;
inline const std::string Grid::dumpDOT() {
std::stringstream sst;
sst << "digraph {" << std::endl;
sst << "graph [ rankdir=LR ];" << std::endl;
sst << "BOS;" << std::endl;
for (size_t p = 0; p < m_spans.size(); p++) {
Span& span = m_spans[p];
@ -237,10 +238,10 @@ inline const string Grid::dumpDOT() {
Node* np = span.nodeOfLength(ni);
if (np) {
if (!p) {
sst << "BOS -> " << np->currentKeyValue().value << ";" << endl;
sst << "BOS -> " << np->currentKeyValue().value << ";" << std::endl;
}
sst << np->currentKeyValue().value << ";" << endl;
sst << np->currentKeyValue().value << ";" << std::endl;
if (p + ni < m_spans.size()) {
Span& dstSpan = m_spans[p + ni];
@ -248,20 +249,20 @@ inline const string Grid::dumpDOT() {
Node* dn = dstSpan.nodeOfLength(q);
if (dn) {
sst << np->currentKeyValue().value << " -> "
<< dn->currentKeyValue().value << ";" << endl;
<< dn->currentKeyValue().value << ";" << std::endl;
}
}
}
if (p + ni == m_spans.size()) {
sst << np->currentKeyValue().value << " -> "
<< "EOS;" << endl;
<< "EOS;" << std::endl;
}
}
}
}
sst << "EOS;" << endl;
sst << "EOS;" << std::endl;
sst << "}";
return sst.str();
}

View File

@ -33,18 +33,18 @@
namespace Formosa {
namespace Gramambular {
using namespace std;
class KeyValuePair {
public:
string key;
string value;
std::string key;
std::string value;
bool operator==(const KeyValuePair& inAnother) const;
bool operator<(const KeyValuePair& inAnother) const;
};
inline ostream& operator<<(ostream& inStream, const KeyValuePair& inPair) {
inline std::ostream& operator<<(std::ostream& inStream,
const KeyValuePair& inPair) {
inStream << "(" << inPair.key << "," << inPair.value << ")";
return inStream;
}

View File

@ -36,16 +36,14 @@
namespace Formosa {
namespace Gramambular {
using namespace std;
class LanguageModel {
public:
virtual ~LanguageModel() {}
virtual const vector<Bigram> bigramsForKeys(const string& preceedingKey,
const string& key) = 0;
virtual const vector<Unigram> unigramsForKey(const string& key) = 0;
virtual bool hasUnigramsForKey(const string& key) = 0;
virtual const std::vector<Bigram> bigramsForKeys(
const std::string& preceedingKey, const std::string& key) = 0;
virtual const std::vector<Unigram> unigramsForKey(const std::string& key) = 0;
virtual bool hasUnigramsForKey(const std::string& key) = 0;
};
} // namespace Gramambular
} // namespace Formosa

View File

@ -35,47 +35,46 @@
namespace Formosa {
namespace Gramambular {
using namespace std;
class Node {
public:
Node();
Node(const string& inKey, const vector<Unigram>& inUnigrams,
const vector<Bigram>& inBigrams);
Node(const std::string& inKey, const std::vector<Unigram>& inUnigrams,
const std::vector<Bigram>& inBigrams);
void primeNodeWithPreceedingKeyValues(
const vector<KeyValuePair>& inKeyValues);
const std::vector<KeyValuePair>& inKeyValues);
bool isCandidateFixed() const;
const vector<KeyValuePair>& candidates() const;
const std::vector<KeyValuePair>& candidates() const;
void selectCandidateAtIndex(size_t inIndex = 0, bool inFix = true);
void resetCandidate();
void selectFloatingCandidateAtIndex(size_t index, double score);
const string& key() const;
const std::string& key() const;
double score() const;
double scoreForCandidate(string& candidate) const;
double scoreForCandidate(std::string& candidate) const;
const KeyValuePair currentKeyValue() const;
double highestUnigramScore() const;
protected:
const LanguageModel* m_LM;
string m_key;
std::string m_key;
double m_score;
vector<Unigram> m_unigrams;
vector<KeyValuePair> m_candidates;
map<string, size_t> m_valueUnigramIndexMap;
map<KeyValuePair, vector<Bigram> > m_preceedingGramBigramMap;
std::vector<Unigram> m_unigrams;
std::vector<KeyValuePair> m_candidates;
std::map<std::string, size_t> m_valueUnigramIndexMap;
std::map<KeyValuePair, std::vector<Bigram> > m_preceedingGramBigramMap;
bool m_candidateFixed;
size_t m_selectedUnigramIndex;
friend ostream& operator<<(ostream& inStream, const Node& inNode);
friend std::ostream& operator<<(std::ostream& inStream, const Node& inNode);
};
inline ostream& operator<<(ostream& inStream, const Node& inNode) {
inline std::ostream& operator<<(std::ostream& inStream, const Node& inNode) {
inStream << "(node,key:" << inNode.m_key
<< ",fixed:" << (inNode.m_candidateFixed ? "true" : "false")
<< ",selected:" << inNode.m_selectedUnigramIndex << ","
@ -86,8 +85,9 @@ inline ostream& operator<<(ostream& inStream, const Node& inNode) {
inline Node::Node()
: m_candidateFixed(false), m_selectedUnigramIndex(0), m_score(0.0) {}
inline Node::Node(const string& inKey, const vector<Unigram>& inUnigrams,
const vector<Bigram>& inBigrams)
inline Node::Node(const std::string& inKey,
const std::vector<Unigram>& inUnigrams,
const std::vector<Bigram>& inBigrams)
: m_key(inKey),
m_unigrams(inUnigrams),
m_candidateFixed(false),
@ -100,7 +100,7 @@ inline Node::Node(const string& inKey, const vector<Unigram>& inUnigrams,
}
size_t i = 0;
for (vector<Unigram>::const_iterator ui = m_unigrams.begin();
for (std::vector<Unigram>::const_iterator ui = m_unigrams.begin();
ui != m_unigrams.end(); ++ui) {
m_valueUnigramIndexMap[(*ui).keyValue.value] = i;
i++;
@ -108,30 +108,30 @@ inline Node::Node(const string& inKey, const vector<Unigram>& inUnigrams,
m_candidates.push_back((*ui).keyValue);
}
for (vector<Bigram>::const_iterator bi = inBigrams.begin();
for (std::vector<Bigram>::const_iterator bi = inBigrams.begin();
bi != inBigrams.end(); ++bi) {
m_preceedingGramBigramMap[(*bi).preceedingKeyValue].push_back(*bi);
}
}
inline void Node::primeNodeWithPreceedingKeyValues(
const vector<KeyValuePair>& inKeyValues) {
const std::vector<KeyValuePair>& inKeyValues) {
size_t newIndex = m_selectedUnigramIndex;
double max = m_score;
if (!isCandidateFixed()) {
for (vector<KeyValuePair>::const_iterator kvi = inKeyValues.begin();
for (std::vector<KeyValuePair>::const_iterator kvi = inKeyValues.begin();
kvi != inKeyValues.end(); ++kvi) {
map<KeyValuePair, vector<Bigram> >::const_iterator f =
std::map<KeyValuePair, std::vector<Bigram> >::const_iterator f =
m_preceedingGramBigramMap.find(*kvi);
if (f != m_preceedingGramBigramMap.end()) {
const vector<Bigram>& bigrams = (*f).second;
const std::vector<Bigram>& bigrams = (*f).second;
for (vector<Bigram>::const_iterator bi = bigrams.begin();
for (std::vector<Bigram>::const_iterator bi = bigrams.begin();
bi != bigrams.end(); ++bi) {
const Bigram& bigram = *bi;
if (bigram.score > max) {
map<string, size_t>::const_iterator uf =
std::map<std::string, size_t>::const_iterator uf =
m_valueUnigramIndexMap.find((*bi).keyValue.value);
if (uf != m_valueUnigramIndexMap.end()) {
newIndex = (*uf).second;
@ -154,7 +154,7 @@ inline void Node::primeNodeWithPreceedingKeyValues(
inline bool Node::isCandidateFixed() const { return m_candidateFixed; }
inline const vector<KeyValuePair>& Node::candidates() const {
inline const std::vector<KeyValuePair>& Node::candidates() const {
return m_candidates;
}
@ -187,11 +187,11 @@ inline void Node::selectFloatingCandidateAtIndex(size_t index, double score) {
m_score = score;
}
inline const string& Node::key() const { return m_key; }
inline const std::string& Node::key() const { return m_key; }
inline double Node::score() const { return m_score; }
inline double Node::scoreForCandidate(string& candidate) const {
inline double Node::scoreForCandidate(std::string& candidate) const {
for (auto unigram : m_unigrams) {
if (unigram.keyValue.value == candidate) {
return unigram.score;

View File

@ -44,7 +44,8 @@ class NodeAnchor {
inline NodeAnchor::NodeAnchor()
: node(0), location(0), spanningLength(0), accumulatedScore(0.0) {}
inline ostream& operator<<(ostream& inStream, const NodeAnchor& inAnchor) {
inline std::ostream& operator<<(std::ostream& inStream,
const NodeAnchor& inAnchor) {
inStream << "{@(" << inAnchor.location << "," << inAnchor.spanningLength
<< "),";
if (inAnchor.node) {
@ -56,9 +57,9 @@ inline ostream& operator<<(ostream& inStream, const NodeAnchor& inAnchor) {
return inStream;
}
inline ostream& operator<<(ostream& inStream,
const vector<NodeAnchor>& inAnchor) {
for (vector<NodeAnchor>::const_iterator i = inAnchor.begin();
inline std::ostream& operator<<(std::ostream& inStream,
const std::vector<NodeAnchor>& inAnchor) {
for (std::vector<NodeAnchor>::const_iterator i = inAnchor.begin();
i != inAnchor.end(); ++i) {
inStream << *i;
if (i + 1 != inAnchor.end()) {

View File

@ -48,7 +48,7 @@ class Span {
size_t maximumLength() const;
protected:
map<size_t, Node> m_lengthNodeMap;
std::map<size_t, Node> m_lengthNodeMap;
size_t m_maximumLength;
};
@ -72,9 +72,9 @@ inline void Span::removeNodeOfLengthGreaterThan(size_t inLength) {
}
size_t max = 0;
set<size_t> removeSet;
for (map<size_t, Node>::iterator i = m_lengthNodeMap.begin(),
e = m_lengthNodeMap.end();
std::set<size_t> removeSet;
for (std::map<size_t, Node>::iterator i = m_lengthNodeMap.begin(),
e = m_lengthNodeMap.end();
i != e; ++i) {
if ((*i).first > inLength) {
removeSet.insert((*i).first);
@ -85,8 +85,8 @@ inline void Span::removeNodeOfLengthGreaterThan(size_t inLength) {
}
}
for (set<size_t>::iterator i = removeSet.begin(), e = removeSet.end(); i != e;
++i) {
for (std::set<size_t>::iterator i = removeSet.begin(), e = removeSet.end();
i != e; ++i) {
m_lengthNodeMap.erase(*i);
}
@ -94,7 +94,7 @@ inline void Span::removeNodeOfLengthGreaterThan(size_t inLength) {
}
inline Node* Span::nodeOfLength(size_t inLength) {
map<size_t, Node>::iterator f = m_lengthNodeMap.find(inLength);
std::map<size_t, Node>::iterator f = m_lengthNodeMap.find(inLength);
return f == m_lengthNodeMap.end() ? 0 : &(*f).second;
}

View File

@ -47,20 +47,21 @@ class Unigram {
static bool ScoreCompare(const Unigram& a, const Unigram& b);
};
inline ostream& operator<<(ostream& inStream, const Unigram& inGram) {
streamsize p = inStream.precision();
inline std::ostream& operator<<(std::ostream& inStream, const Unigram& inGram) {
std::streamsize p = inStream.precision();
inStream.precision(6);
inStream << "(" << inGram.keyValue << "," << inGram.score << ")";
inStream.precision(p);
return inStream;
}
inline ostream& operator<<(ostream& inStream, const vector<Unigram>& inGrams) {
inline std::ostream& operator<<(std::ostream& inStream,
const std::vector<Unigram>& inGrams) {
inStream << "[" << inGrams.size() << "]=>{";
size_t index = 0;
for (vector<Unigram>::const_iterator gi = inGrams.begin();
for (std::vector<Unigram>::const_iterator gi = inGrams.begin();
gi != inGrams.end(); ++gi, ++index) {
inStream << index << "=>";
inStream << *gi;

View File

@ -34,13 +34,12 @@
namespace Formosa {
namespace Gramambular {
using namespace std;
class Walker {
public:
Walker(Grid* inGrid);
const vector<NodeAnchor> reverseWalk(size_t inLocation,
double inAccumulatedScore = 0.0);
const std::vector<NodeAnchor> reverseWalk(size_t inLocation,
double inAccumulatedScore = 0.0);
protected:
Grid* m_grid;
@ -48,17 +47,17 @@ class Walker {
inline Walker::Walker(Grid* inGrid) : m_grid(inGrid) {}
inline const vector<NodeAnchor> Walker::reverseWalk(size_t inLocation,
double inAccumulatedScore) {
inline const std::vector<NodeAnchor> Walker::reverseWalk(
size_t inLocation, double inAccumulatedScore) {
if (!inLocation || inLocation > m_grid->width()) {
return vector<NodeAnchor>();
return std::vector<NodeAnchor>();
}
vector<vector<NodeAnchor> > paths;
std::vector<std::vector<NodeAnchor> > paths;
vector<NodeAnchor> nodes = m_grid->nodesEndingAt(inLocation);
std::vector<NodeAnchor> nodes = m_grid->nodesEndingAt(inLocation);
for (vector<NodeAnchor>::iterator ni = nodes.begin(); ni != nodes.end();
for (std::vector<NodeAnchor>::iterator ni = nodes.begin(); ni != nodes.end();
++ni) {
if (!(*ni).node) {
continue;
@ -66,7 +65,7 @@ inline const vector<NodeAnchor> Walker::reverseWalk(size_t inLocation,
(*ni).accumulatedScore = inAccumulatedScore + (*ni).node->score();
vector<NodeAnchor> path =
std::vector<NodeAnchor> path =
reverseWalk(inLocation - (*ni).spanningLength, (*ni).accumulatedScore);
path.insert(path.begin(), *ni);
@ -74,11 +73,11 @@ inline const vector<NodeAnchor> Walker::reverseWalk(size_t inLocation,
}
if (!paths.size()) {
return vector<NodeAnchor>();
return std::vector<NodeAnchor>();
}
vector<NodeAnchor>* result = &*(paths.begin());
for (vector<vector<NodeAnchor> >::iterator pi = paths.begin();
std::vector<NodeAnchor>* result = &*(paths.begin());
for (std::vector<std::vector<NodeAnchor> >::iterator pi = paths.begin();
pi != paths.end(); ++pi) {
if ((*pi).back().accumulatedScore > result->back().accumulatedScore) {
result = &*pi;