/*
    kqcstringsplitter.cpp

    KNode, the KDE newsreader
    Copyright (c) 1999-2001 the KNode authors.
    See file AUTHORS for details

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software Foundation,
    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, US
*/

#include "kqcstringsplitter.h"

KTQCStringSplitter::KTQCStringSplitter()
{
  reset();
}




KTQCStringSplitter::~KTQCStringSplitter()
{
}



void KTQCStringSplitter::init(const TQCString &str, const char *s)
{
  sep=s;
  src=str;
}



void KTQCStringSplitter::init(const char *str, const char *s)
{
  sep=s;
  src=str;
}

bool KTQCStringSplitter::first()
{
  /*int plus;
  if(incSep) plus=sep.length();
  else plus=0;  */
  
  start=0;
  
  end=src.tqfind(sep.data(), start);
  
  if(end!=-1) {
    dst=src.mid(start, end);
    return true;
  }
  else {
    start=src.length();
    end=start;
    return false;
  }
    
}



bool KTQCStringSplitter::last()
{
  /*int startplus, endplus;
  
  if(incSep) {
    startplus=0;
    endplus=sep.length();
  }
  else {
    startplus=sep.length();
    endplus=0;
  }*/
    
  end=src.length();
    
  start=src.tqfindRev(sep.data(),end);
  
  if(start!=-1) {
    dst=src.mid(start, end-start);
    return true;
  }
  else return false;
  

}



bool KTQCStringSplitter::next()
{
  /*int plus;
  if(incSep) plus=sep.length();
  else plus=0;*/
  
  start=end+1;
  
  if(start< (int) src.length()) {
    
    end=src.tqfind(sep.data(), start);
    
    if(end!=-1) {
      dst=src.mid(start, end-start);
    }
    else {
      dst=src.mid(start, src.length()-start);
      start=src.length();
      end=src.length();
    }
    
    return true;
  }
  else return false;
  
}



bool KTQCStringSplitter::prev()
{
  /*int startplus, endplus;
  
  if(incSep) {
    startplus=0;
    endplus=sep.length();
  }
  else {
    startplus=sep.length();
    endplus=0;
  }*/
  
  end=start-1;
  
  if(end>0) {
    
    start=src.tqfindRev(sep.data(),end);
    
    if(start!=-1)
      dst=src.mid(start, end-start);
    
    else {
      dst=src.mid(0, end+1);
      end=0;
      start=0;
    }
  
    return true;
  }
  else return false;

}