blob: daa0d2528cc9988709b72bdc37b1a0b7e6a7ad20 [file] [log] [blame]
/** \file result_specification.hpp .
-----------------------------------------------------------------------------
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
-----------------------------------------------------------------------------
\brief Contains uima::ResultSpecification
Description:
-----------------------------------------------------------------------------
02/05/2003 Initial creation
-------------------------------------------------------------------------- */
#ifndef UIMA_RESULT_SPECIFICATION_HPP
#define UIMA_RESULT_SPECIFICATION_HPP
/* ----------------------------------------------------------------------- */
/* Include dependencies */
/* ----------------------------------------------------------------------- */
#include "uima/pragmas.hpp" // must be first file to be included to get pragmas
#include <set>
#include "unicode/unistr.h"
#include "uima/unistrref.hpp"
#include "uima/typesystem.hpp"
#include "uima/internal_fspromoter.hpp"
#include "uima/type_or_feature.hpp"
/* ----------------------------------------------------------------------- */
/* Constants */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* Forward declarations */
/* ----------------------------------------------------------------------- */
/* ----------------------------------------------------------------------- */
/* Types / Classes */
/* ----------------------------------------------------------------------- */
namespace uima {
/**
* An engine/annotator gets a set like this passed in its process() function
* and is required to check this set to see which kind of output types and
* features it is supposed to create.
* An annotator which produces only one kind of output can skip this check since
* is made sure that the set only contains types/features which
* the annotator is capable of producing and would never call an annotator that is
* not required at all.
* So this set is most relevant for multi-purpose annotators to determine which
* of their various functions are required for this specific document.
*/
class UIMA_LINK_IMPORTSPEC ResultSpecification {
public:
typedef std::set< TypeOrFeature > TyTypeOrFeatureSTLSet;
private:
TyTypeOrFeatureSTLSet iv_targetSet;
/// check if a type or feature name is contained in this set
bool isSubsumedBySomeElement(TypeOrFeature const & crElem) const {
std::set<TypeOrFeature>::const_iterator it;
for (it = iv_targetSet.begin(); it != iv_targetSet.end(); ++it) {
if ( (*it).subsumes(crElem) ) {
return true;
}
}
return false;
}
public:
/**
* An annotator can call this method to determine whether it should
* produce the specified TypeOrFeature.
*/
bool shouldBeCreatedByAnnotator(TypeOrFeature const & crTypeOrFeature) const {
assert( crTypeOrFeature.isValid() );
return contains(crTypeOrFeature);
}
TyTypeOrFeatureSTLSet const & getTypeOrFeatureSTLSet() const {
return iv_targetSet;
}
void clear() {
iv_targetSet.clear();
}
size_t getSize() const {
return iv_targetSet.size();
}
void add(TypeOrFeature const & crTypeOrFeature) {
assert( crTypeOrFeature.isValid() );
iv_targetSet.insert(crTypeOrFeature);
}
void remove(TypeOrFeature const & crTypeOrFeature) {
assert( crTypeOrFeature.isValid() );
iv_targetSet.erase(crTypeOrFeature);
}
bool contains(TypeOrFeature const & crTypeOrFeature) const {
assert( crTypeOrFeature.isValid() );
return iv_targetSet.find(crTypeOrFeature) != iv_targetSet.end();
}
void print(ostream & os) const {
os << "ResultSpecification: " << endl;
ResultSpecification::TyTypeOrFeatureSTLSet const & crTOFSet = getTypeOrFeatureSTLSet();
ResultSpecification::TyTypeOrFeatureSTLSet::const_iterator cit;
for (cit = crTOFSet.begin(); cit != crTOFSet.end(); ++cit) {
TypeOrFeature const & crTOF = (*cit);
// os << "Check TOF: " << i++ << endl;
assert( (*cit).isValid() );
assert( crTOF.isValid() );
assert( contains( crTOF ) );
os << " TOF Name: " << crTOF.getName() << endl;
}
}
}
; /* class ResultSpecification */
} // namespace uima
/* ----------------------------------------------------------------------- */
/* Implementation */
/* ----------------------------------------------------------------------- */
#endif /* UIMA_RESULT_SPECIFICATION_HPP */
/* <EOF> */