File: Container.h

package info (click to toggle)
glgrib 1.0-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,861,496 kB
  • sloc: cpp: 20,811; ansic: 6,530; perl: 2,902; sh: 513; makefile: 147; python: 58; sql: 18
file content (82 lines) | stat: -rw-r--r-- 1,848 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#pragma once

#include <string>
#include <vector>
#include <eccodes.h>

namespace glGrib
{

class Container
{
public:
  static Container * create (const std::string &, bool = false);
  static void remove (Container *);
  static void clear ();
  explicit Container (const std::string & _file) : file (_file) {}
  virtual ~Container () {}
  virtual codes_handle * getHandleByExt (const std::string &) = 0;
  virtual bool hasExt (const std::string &) const = 0;
  const std::string & getFile () const { return file; }
  virtual void buildIndex () = 0;
  virtual const std::string & getNextExt (const std::string &) = 0;
  virtual const std::string & getPrevExt (const std::string &) = 0;
  class _iterator 
  {
  public:
    virtual void incr () = 0;
    virtual const std::string & str () = 0;
    virtual bool isEqual (const _iterator *) const = 0;
    virtual ~_iterator () {}
    virtual bool last () const = 0;
  };
public:
  class iterator
  {
  public:
    iterator () {}
    explicit iterator (_iterator * _it) : it (_it) {}
    iterator & operator++ ()
    {
      it->incr ();
      return *this;
    }
    virtual ~iterator ()
    {
      delete it;
    }
    const std::string & operator* ()
    {    
      return it->str ();
    }    
    bool operator!= (const iterator & rhs) const
    {    
      return ! operator== (rhs);
    }    
    bool operator== (const iterator & rhs) const
    {    
      // Both at end
      if ((it == nullptr) && (rhs.it == nullptr))
        return true;

      // At end or not
      if (rhs.it == nullptr)
        return it->last ();

      // At end ?
      if (it == nullptr)
        return rhs.it->last ();

      return it->isEqual (rhs.it);
    }    
  private:
    _iterator * it = nullptr;
  };
  virtual iterator begin () = 0;
  virtual iterator end () = 0;
private:
  std::string file;
};


}