%{
	#include "CLucene/store/Directory.h"
	#include "CLucene/store/FSDirectory.h"
	#include "CLucene/store/RAMDirectory.h"
%}

////////////////////////////////////////////////////////////////////////////////
//Lock.h
////////////////////////////////////////////////////////////////////////////////
%ignore lucene::store::LuceneLock;
%ignore lucene::store::LuceneLockWith;

////////////////////////////////////////////////////////////////////////////////
//InputStream.h
////////////////////////////////////////////////////////////////////////////////
#ifndef _SUMO
  %ignore CL_NS(store)::InputStream;
#else
	//havent implemented byref stuff, and i'm lazy to do all the file stuff right now
	//%ignore lucene::store::InputStream::readByte;
	%ignore lucene::store::InputStream::readBytes;
	%ignore lucene::store::InputStream::readChars;
	%ignore lucene::store::InputStream::readString;
	//%ignore lucene::store::InputStream::seek; //todo: decide on this
	%ignore lucene::store::InputStream::seekInternal;
	%ignore lucene::store::InputStream::readInternal;
#endif

////////////////////////////////////////////////////////////////////////////////
//OutputStream.h
////////////////////////////////////////////////////////////////////////////////
#ifndef _SUMO
  %ignore lucene::store::OutputStream;
#else
	//havent implemented byref stuff //todo: decide on sharing this
	%ignore lucene::store::OutputStream::seek; 
	%ignore lucene::store::OutputStream::isClosed;
	%ignore lucene::store::OutputStream::Length; //todo: rename caps
	%ignore lucene::store::OutputStream::flushBuffer;
#endif

////////////////////////////////////////////////////////////////////////////////
//Directory.h
////////////////////////////////////////////////////////////////////////////////
%ignore lucene::store::FSDirectory::DIRECTORIES_MUTEX;
%ignore lucene::store::Directory::makeLock;
%nodefault lucene::store::Directory;

/* Directory class: */
#ifndef _SUMO
  /* In a non-sumo build, treat Directories as "semi-opaque handles" only. */
  /* Do not ignore the Directory::list() method. */
  %ignore lucene::store::Directory::fileExists;
  %ignore lucene::store::Directory::fileModified;
  %ignore lucene::store::Directory::deleteFile;
  %ignore lucene::store::Directory::renameFile;
  %ignore lucene::store::Directory::touchFile;
  %ignore lucene::store::Directory::list;
  %ignore lucene::store::Directory::fileLength;
  %ignore lucene::store::Directory::createFile;
  %ignore lucene::store::Directory::openFile;
  %ignore lucene::store::Directory::makeLock;
  /* Do not ignore the Directory::close() method. */
#else /* def _SUMO? */
  %newobject lucene::store::Directory::createFile;
  %newobject lucene::store::Directory::openFile;
  %newobject lucene::store::Directory::makeLock;
#endif /* ndef _SUMO */

////////////////////////////////////////////////////////////////////////////////
//FSDirectory
////////////////////////////////////////////////////////////////////////////////
%newobject lucene::store::FSDirectory::getDirectory;


////////////////////////////////////////////////////////////////////////////////
//RAMDirectory
////////////////////////////////////////////////////////////////////////////////
#ifndef _SUMO
	%ignore lucene::store::RAMOutputStream;
	%ignore lucene::store::RAMInputStream;
#else
	%ignore lucene::store::RAMOutputStream::RAMOutputStream;
	%ignore lucene::store::RAMInputStream::RAMInputStream;
#endif

%ignore lucene::store::RAMFile;
%ignore lucene::store::RAMLock;

////////////////////////////////////////////////////////////////////////////////
//now include local definition
%include "local_store.i";

//now include the clucene headers
%include "CLucene/store/Lock.h";
%include "CLucene/store/InputStream.h";
%include "CLucene/store/OutputStream.h";
%include "CLucene/store/Directory.h";
%include "CLucene/store/FSDirectory.h";
%include "CLucene/store/RAMDirectory.h";
