[cosmetics] update date in GPL header
[vuplus_xbmc] / xbmc / utils / Archive.h
1 #pragma once
2
3 /*
4  *      Copyright (C) 2005-2013 Team XBMC
5  *      http://www.xbmc.org
6  *
7  *  This Program is free software; you can redistribute it and/or modify
8  *  it under the terms of the GNU General Public License as published by
9  *  the Free Software Foundation; either version 2, or (at your option)
10  *  any later version.
11  *
12  *  This Program is distributed in the hope that it will be useful,
13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  *  GNU General Public License for more details.
16  *
17  *  You should have received a copy of the GNU General Public License
18  *  along with XBMC; see the file COPYING.  If not, see
19  *  <http://www.gnu.org/licenses/>.
20  *
21  */
22
23 #include "StdString.h"
24 #include "system.h" // for SYSTEMTIME
25
26 namespace XFILE
27 {
28   class CFile;
29 }
30 class CVariant;
31
32 class CArchive;
33
34 class IArchivable
35 {
36 public:
37   virtual void Archive(CArchive& ar) = 0;
38   virtual ~IArchivable() {}
39 };
40
41 class CArchive
42 {
43 public:
44   CArchive(XFILE::CFile* pFile, int mode);
45   ~CArchive();
46   // storing
47   CArchive& operator<<(float f);
48   CArchive& operator<<(double d);
49   CArchive& operator<<(int i);
50   CArchive& operator<<(unsigned int i);
51   CArchive& operator<<(int64_t i64);
52   CArchive& operator<<(uint64_t ui64);
53   CArchive& operator<<(bool b);
54   CArchive& operator<<(char c);
55   CArchive& operator<<(const std::string &str);
56   CArchive& operator<<(const CStdString& str);
57   CArchive& operator<<(const CStdStringW& str);
58   CArchive& operator<<(const SYSTEMTIME& time);
59   CArchive& operator<<(IArchivable& obj);
60   CArchive& operator<<(const CVariant& variant);
61   CArchive& operator<<(const std::vector<std::string>& strArray);
62   CArchive& operator<<(const std::vector<int>& iArray);
63
64   // loading
65   CArchive& operator>>(float& f);
66   CArchive& operator>>(double& d);
67   CArchive& operator>>(int& i);
68   CArchive& operator>>(unsigned int& i);
69   CArchive& operator>>(int64_t& i64);
70   CArchive& operator>>(uint64_t& ui64);
71   CArchive& operator>>(bool& b);
72   CArchive& operator>>(char& c);
73   CArchive& operator>>(std::string &str);
74   CArchive& operator>>(CStdString& str);
75   CArchive& operator>>(CStdStringW& str);
76   CArchive& operator>>(SYSTEMTIME& time);
77   CArchive& operator>>(IArchivable& obj);
78   CArchive& operator>>(CVariant& variant);
79   CArchive& operator>>(std::vector<std::string>& strArray);
80   CArchive& operator>>(std::vector<int>& iArray);
81
82   bool IsLoading();
83   bool IsStoring();
84
85   void Close();
86
87   enum Mode {load = 0, store};
88
89 protected:
90   void FlushBuffer();
91   XFILE::CFile* m_pFile;
92   int m_iMode;
93   uint8_t *m_pBuffer;
94   int m_BufferPos;
95 };
96