This is a complete implementation of the Siena tags-based data model. In particular, this file shows how to implement the siena::TagSet, siena::TagSetList interfaces. This implementation (definitions) correspond to the declaration in the simple_tags_types.h header file.
#include <set>
#include <string>
#include <vector>
#include "simple_tags_types.h"
bool simple_tagset::iterator::next() {
return (++itr != ts->end());
};
std::string simple_tagset::iterator::to_string() const {
return *itr;
}
std::string & simple_tagset::iterator::to_string(std::string & x) const {
x = *itr;
return x;
}
simple_tagset::iterator::iterator(const std::set<std::string> * s,
std::set<std::string>::const_iterator i)
: ts(s), itr(i) {};
simple_tagset::iterator::~iterator() {};
std::set<std::string>::const_iterator b = ts.begin();
if (b == ts.end()) {
return 0;
} else {
return new simple_tagset::iterator(&ts,b);
}
}
void simple_tagset::add_tag(const std::string & s) {
ts.insert(s);
}
bool simple_tagset_list::iterator::next() {
return (++itr != tsv->end());
};
simple_tagset_list::iterator::~iterator() {};
simple_tagset_list::iterator::iterator(const std::vector<const simple_tagset *> * v,
std::vector<const simple_tagset *>::const_iterator i)
: tsv(v), itr(i) {};
return (*itr)->first();
}
void simple_tagset_list::add_tagset(const simple_tagset * s) {
l.push_back(s);
}
std::vector<const simple_tagset *>::const_iterator b = l.begin();
if (b == l.end()) {
return 0;
} else {
return new simple_tagset_list::iterator(&l,b);
}
}
simple_tagset_list::~simple_tagset_list() {
for (std::vector<const simple_tagset *>::const_iterator i = l.begin();
i != l.end(); ++i)
if(*i) delete(*i);
}