//  This may look like C code, but it is really -*- C++ -*-

//  ------------------------------------------------------------------
//  The Goldware Library
//  Copyright (C) 1999-2000 Alexander S. Aganichev
//  ------------------------------------------------------------------
//  This library is free software; you can redistribute it and/or
//  modify it under the terms of the GNU Library General Public
//  License as published by the Free Software Foundation; either
//  version 2 of the License, or (at your option) any later version.
//
//  This library is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
//  Library General Public License for more details.
//
//  You should have received a copy of the GNU Library General Public
//  License along with this program; if not, write to the Free
//  Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
//  MA 02111-1307, USA
//  ------------------------------------------------------------------
//  $Id$
//  ------------------------------------------------------------------
//  Directory maintenance class.
//  ------------------------------------------------------------------

#ifndef __gdirposx
#define __gdirposx


//  ------------------------------------------------------------------

#include <gfilutil.h>
#include <gstrall.h>


//  ------------------------------------------------------------------

class gdirentry
{

public:
    std::string name;
    struct stat stat_info;
    const char *dirname;
    gdirentry();
    ~gdirentry();
    bool is_directory() const
    {
        return S_ISDIR(stat_info.st_mode);
    }
    bool is_file() const
    {
        return S_ISREG(stat_info.st_mode);
    }
};


//  ------------------------------------------------------------------

class gposixdir
{

private:
    std::string dirname;
    gdirentry ret;
    gstrarray entries;
    uint32_t last_entry;

public:
    bool ok;
    gposixdir();
    gposixdir(const char *name);
    ~gposixdir();
    void cd(const char *name, bool relative=false);
    inline void rewind()
    {
        last_entry = 0;
    }
    const gdirentry *nextentry(const char *mask=NULL, bool nameonly=false);
    inline const char *fullpath()
    {
        return dirname.c_str();
    }
};


//  ------------------------------------------------------------------

#endif // __gdirposx

//  ------------------------------------------------------------------
