/*   -*- coding: utf-8 -*-  */
/**********************************************************************
*
*  module   : Hfd 
*  fichier  : HfdIterator.h
*  Auteur   : Jacques DUCLOY
*  Date     : Février 2015 (à partir de HfdHcb.h)
*
***********************************************************************/
#ifndef _HFD_ITERATOR_H_
#define _HFD_ITERATOR_H_

#include "StrDict.h"
#include "HfdRecord.h"
#include "HfdHcb.h"

#define HfdEOF   1

/* Hfd Iterator */

struct HfdIterator_Struct
{
  StrDict                      *table;
  struct HfdIterator_Struct    *subDir;
  char                         *filePath;
  char                         *currentDir;
  int                           filePathLenght;
  int                           subDirExploring;
  int                           isMultiGroup;
  char                          mode;    /* h : hfd  x : xml a : all*/
  Buffer                       *multiBegin;
  SxmlNode                     *hcs;
};

typedef struct HfdIterator_Struct HfdIterator ;

struct HfdStreamIterator_Struct
{
  char          **listEntry;
  char           *currentHfdPath;
  char           *currentFilePath;
  HfdIterator    *hfdIterator;
  int             hfdExploring;
  int             indicEntry;
  int             stdinHasBeenReaded;
  int             oneStreamHasBeenReaded;
  int             listIsClosed;
  char            mode;    /* h : hfd  x : xml a : all*/
  FILE           *currentFile;
};

typedef struct HfdStreamIterator_Struct HfdStreamIterator ;

#define HfdRecordKey(x) BufferString(x->key)
#define HfdFileKey(x)   BufferString(x->record->key)
#define HfdCurrentPath(x) x->currentPath
void HfdSetFirstKey(HfdHcb *hfd);

HfdStreamIterator *HfdStreamIteratorCreate(char mode);
HfdStreamIterator *HfdStreamIteratorSetStreams(HfdStreamIterator *iter, char **listName);
char *HfdStreamIteratorCurrentFileName(HfdStreamIterator *iter);

FILE* HfdNextStream(HfdStreamIterator *iter);
char *HfdRecordAfterKey(HfdRecord *record);

HfdIterator *HfdIteratorCreate(char mode);
void HfdIteratorFree(HfdIterator *iter);
HfdIterator *HfdIteratorInit(HfdIterator *hfdIter, char *dirName);
char *HfdNextFilePath(HfdIterator *hfdIter);

#endif /* _HFD_ITERATOR_H_ */

