/** \file casiterator.cpp
-----------------------------------------------------------------------------



\brief  Contains implementation of uima::CASIterator

 * 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.


-------------------------------------------------------------------------- */


// ---------------------------------------------------------------------------
//  Includes
// ---------------------------------------------------------------------------


#include "uima/casiterator.hpp"
#include "uima/err_ids.h"
#include "uima/msg.h"


namespace uima {


  UIMA_EXC_CLASSIMPLEMENT(CASIteratorException, uima::Exception);
  //------------------------------------------------------------
  //
  // CASIterator implementation
  //
  //------------------------------------------------------------

  CASIterator::CASIterator(AnalysisEngine * pEngine)
      : iv_engine(pEngine) {}


  CASIterator::~CASIterator() {
  }

  bool CASIterator::hasNext() {
    return iv_engine->hasNext();
  }

  CAS & CASIterator::next() {
    return iv_engine->next();
  }

  void CASIterator::release() {

    return;
  }

} //namespace
