Changeset 2361


Ignore:
Timestamp:
Feb 5, 2013, 3:48:26 AM (7 years ago)
Author:
sam
Message:

sys: prototype for the file reading functions.

Location:
trunk/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/lol/base/string.h

    r2270 r2361  
    9696    }
    9797
     98    /* Return a C string */
     99    inline char const *C() const
     100    {
     101        return &(*this)[0];
     102    }
     103
     104    /* Does not initialise the newly allocated characters */
    98105    void Resize(int count)
    99106    {
  • trunk/src/lol/sys/atomic.h

    r2359 r2361  
    2121{
    2222public:
     23    inline Atomic() : m_value(0) {}
    2324    inline Atomic(T const &value) : m_value(value) {}
    2425
     
    4344    }
    4445
    45     inline T& operator++()
     46    inline T operator++()
    4647    {
    4748        m_mutex.Lock();
     
    5960    }
    6061
    61     inline T& operator--()
     62    inline T operator--()
    6263    {
    6364        m_mutex.Lock();
  • trunk/src/lol/sys/file.h

    r2358 r2361  
    3838{
    3939public:
    40     inline File() : m_data(0) {}
    41     inline ~File() {}
     40    File();
     41    File(File const &that);
     42    File &operator =(File const &that);
     43    ~File();
    4244
    4345    void Open(String const &file, FileAccess mode);
    44     String const &ReadString();
     46    String ReadString();
    4547    void Close();
    4648
  • trunk/src/sys/file.cpp

    r2358 r2361  
    2222    friend class File;
    2323
     24    void Open(String const &file, FileAccess mode)
     25    {
     26#if HAVE_STDIO_H
     27        /* FIXME: no modes, no error checking, no nothing */
     28        m_fd = fopen(file.C(), "r");
     29#endif
     30    }
     31
     32    String ReadString()
     33    {
     34        String ret;
     35#if HAVE_STDIO_H
     36        while (!feof(m_fd))
     37        {
     38            char buf[BUFSIZ];
     39            size_t count = fread(buf, 1, BUFSIZ, m_fd);
     40            if (count <= 0)
     41                break;
     42
     43            int oldsize = ret.Count();
     44            ret.Resize(oldsize + count);
     45            memcpy(&ret[oldsize], buf, count);
     46        }
     47#endif
     48        return ret;
     49    }
     50
     51    void Close()
     52    {
     53#if HAVE_STDIO_H
     54        fclose(m_fd);
     55#endif
     56    }
     57
     58#if HAVE_STDIO_H
     59    FILE *m_fd;
     60#endif
     61    Atomic<int> m_refcount;
    2462};
     63
     64File::File()
     65  : m_data(new FileData)
     66{
     67    ++m_data->m_refcount;
     68}
     69
     70File::File(File const &that)
     71  : m_data(that.m_data)
     72{
     73    ++m_data->m_refcount;
     74}
     75
     76File &File::operator =(File const &that)
     77{
     78    if (this == &that)
     79        return *this;
     80
     81    int refcount = --m_data->m_refcount;
     82    if (refcount == 0)
     83    {
     84        m_data->Close();
     85        delete m_data;
     86    }
     87
     88    m_data = that.m_data;
     89    ++m_data->m_refcount;
     90
     91    return *this;
     92}
     93
     94File::~File()
     95{
     96    int refcount = --m_data->m_refcount;
     97    if (refcount == 0)
     98    {
     99        m_data->Close();
     100        delete m_data;
     101    }
     102}
     103
     104void File::Open(String const &file, FileAccess mode)
     105{
     106    return m_data->Open(file, mode);
     107}
     108
     109String File::ReadString()
     110{
     111    return m_data->ReadString();
     112}
     113
     114void File::Close()
     115{
     116    m_data->Close();
     117}
    25118
    26119} /* namespace lol */
Note: See TracChangeset for help on using the changeset viewer.