diff --git a/libcorpus2/io/cclwriter.cpp b/libcorpus2/io/cclwriter.cpp index 4909291996ac478a6a1ada2b654ac37241d19da2..b5ecf86a6eb53edc2d16af7177d5df89c9496721 100644 --- a/libcorpus2/io/cclwriter.cpp +++ b/libcorpus2/io/cclwriter.cpp @@ -58,7 +58,7 @@ void CclWriter::write_sentence_int(const Sentence &s) os() << v.second.get_segment_at(idx); os() << "</ann>\n"; } - TokenMetaData* md = t->get_metadata(); + boost::shared_ptr<TokenMetaData> md = t->get_metadata(); if (md) { foreach (const TokenMetaData::attr_map_t::value_type& v, md->attributes()) { osi() << "<prop key=\"" << v.first << "\"" << ">"; diff --git a/libcorpus2/token.cpp b/libcorpus2/token.cpp index 496289af8fecced0c5c4bef1c5499b0f852eb247..5438c4b2caad75c58c4d81c0aced6850fe37ae1f 100644 --- a/libcorpus2/token.cpp +++ b/libcorpus2/token.cpp @@ -23,7 +23,7 @@ or FITNESS FOR A PARTICULAR PURPOSE. namespace Corpus2 { Token::Token() - : orth_(), wa_(), lexemes_(), metadata_(NULL) + : orth_(), wa_(), lexemes_(), metadata_() { } @@ -44,8 +44,8 @@ Token* Token::clone() const t->orth_ = orth_; t->wa_ = wa_; t->lexemes_ = lexemes_; - if (metadata_.get()) { - t->set_metadata(metadata_->clone()); + if (metadata_) { + t->set_metadata_ptr(metadata_->clone()); } return t; } @@ -153,7 +153,8 @@ bool Token::orth_pos_match(mask_t pos, const UnicodeString &orth) const void Token::create_metadata() { - metadata_.reset(new TokenMetaData); + // metadata_.reset(new TokenMetaData); + metadata_ = boost::make_shared<TokenMetaData>(); } } /* end ns Corpus2 */ diff --git a/libcorpus2/token.h b/libcorpus2/token.h index d1834509207edfe9f2e5d64db1c8f65a4bc51aa0..4ab4272f1db8df09569d06ef8cfd12fc19eb100a 100644 --- a/libcorpus2/token.h +++ b/libcorpus2/token.h @@ -24,6 +24,9 @@ or FITNESS FOR A PARTICULAR PURPOSE. #include <libpwrutils/util.h> #include <libpwrutils/whitespace.h> +#include <boost/shared_ptr.hpp> +#include <boost/make_shared.hpp> + #include <boost/iterator/filter_iterator.hpp> #include <boost/function.hpp> @@ -186,13 +189,19 @@ public: bool orth_pos_match(mask_t pos, const UnicodeString& orth) const; /// Metadata setter - void set_metadata(TokenMetaData* md) { - metadata_.reset(md); + void set_metadata(TokenMetaData& md) { + // metadata_.reset(md); + metadata_ = md.clone(); + } + + /// Metadata setter (sets metadata as shared_ptr) + void set_metadata_ptr(boost::shared_ptr<TokenMetaData> md) { + metadata_ = md; } /// Metadata getter - TokenMetaData* get_metadata() const { - return metadata_.get(); + boost::shared_ptr<TokenMetaData> get_metadata() const { + return metadata_; } /// Creates an empty metdata object for this Token @@ -210,7 +219,8 @@ private: std::vector<Lexeme> lexemes_; /// Metadata - std::auto_ptr<TokenMetaData> metadata_; + // std::auto_ptr<TokenMetaData> metadata_; + boost::shared_ptr<TokenMetaData> metadata_; }; } /* end ns Corpus2 */