aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cache.cpp39
-rw-r--r--src/cache.h33
-rw-r--r--src/variable.cpp81
-rw-r--r--src/variable.h6
4 files changed, 159 insertions, 0 deletions
diff --git a/src/cache.cpp b/src/cache.cpp
new file mode 100644
index 0000000..1646d0a
--- /dev/null
+++ b/src/cache.cpp
@@ -0,0 +1,39 @@
1#include "cache.h"
2#include <bu/file.h>
3#include <bu/archive.h>
4
5Cache::Cache() :
6 bIsLoaded( false )
7{
8}
9
10Cache::~Cache()
11{
12}
13
14void Cache::bind( const Bu::FString &sCacheFile )
15{
16 this->sCacheFile = sCacheFile;
17 load();
18}
19
20void Cache::load()
21{
22 if( bIsLoaded )
23 return;
24 Bu::File fIn( sCacheFile, Bu::File::Read );
25 Bu::Archive ar( fIn, Bu::Archive::load );
26
27 ar >> hRequires >> hVariables;
28
29 bIsLoaded = true;
30}
31
32void Cache::save()
33{
34 Bu::File fIn( sCacheFile, Bu::File::WriteNew );
35 Bu::Archive ar( fIn, Bu::Archive::save );
36
37 ar << hRequires << hVariables;
38}
39
diff --git a/src/cache.h b/src/cache.h
new file mode 100644
index 0000000..b255e94
--- /dev/null
+++ b/src/cache.h
@@ -0,0 +1,33 @@
1#ifndef CACHE_H
2#define CACHE_H
3
4#include <bu/singleton.h>
5#include <bu/fstring.h>
6#include <bu/hash.h>
7#include <bu/list.h>
8
9#include "variable.h"
10
11class Cache : public Bu::Singleton<Cache>
12{
13friend class Bu::Singleton<Cache>;
14private:
15 Cache();
16 virtual ~Cache();
17
18public:
19 void bind( const Bu::FString &sCacheFile );
20
21 void load();
22 void save();
23
24private:
25 Bu::FString sCacheFile;
26 bool bIsLoaded;
27 typedef Bu::Hash<Bu::FString, Bu::List<Bu::FString> > ReqHash;
28 ReqHash hRequires;
29 typedef Bu::Hash<Bu::FString, Variable> VarHash;
30 VarHash hVariables;
31};
32
33#endif
diff --git a/src/variable.cpp b/src/variable.cpp
index 99bac59..87571b6 100644
--- a/src/variable.cpp
+++ b/src/variable.cpp
@@ -890,3 +890,84 @@ Bu::Formatter &operator<<( Bu::Formatter &f, const Variable &v )
890 return f; 890 return f;
891} 891}
892 892
893Bu::ArchiveBase &operator<<( Bu::ArchiveBase &ar, const Variable &v )
894{
895 ar << (int8_t)v.eType;
896 switch( v.eType )
897 {
898 case Variable::typeNone:
899 break;
900
901 case Variable::typeBool:
902 ar << v.uVal.bVal;
903 break;
904
905 case Variable::typeInt:
906 ar << v.uVal.iVal;
907 break;
908
909 case Variable::typeFloat:
910 ar << v.uVal.fVal;
911 break;
912
913 case Variable::typeVersion:
914 break;
915
916 case Variable::typeString:
917 ar << *v.uVal.sVal;
918 break;
919
920 case Variable::typeList:
921 ar << *v.uVal.lVal;
922 break;
923
924 case Variable::typeRef:
925 ar << *v.uVal.sVal;
926 break;
927 }
928
929 return ar;
930}
931
932Bu::ArchiveBase &operator>>( Bu::ArchiveBase &ar, Variable &v )
933{
934 int8_t t;
935 ar >> t;
936 v.eType = (Variable::Type)t;
937 v.reset( v.eType );
938 switch( v.eType )
939 {
940 case Variable::typeNone:
941 break;
942
943 case Variable::typeBool:
944 ar >> v.uVal.bVal;
945 break;
946
947 case Variable::typeInt:
948 ar >> v.uVal.iVal;
949 break;
950
951 case Variable::typeFloat:
952 ar >> v.uVal.fVal;
953 break;
954
955 case Variable::typeVersion:
956 break;
957
958 case Variable::typeString:
959 ar >> *v.uVal.sVal;
960 break;
961
962 case Variable::typeList:
963 ar >> *v.uVal.lVal;
964 break;
965
966 case Variable::typeRef:
967 ar >> *v.uVal.sVal;
968 break;
969 }
970
971 return ar;
972}
973
diff --git a/src/variable.h b/src/variable.h
index 1b5542e..c8679a8 100644
--- a/src/variable.h
+++ b/src/variable.h
@@ -2,12 +2,15 @@
2#define VARIABLE_H 2#define VARIABLE_H
3 3
4#include "types.h" 4#include "types.h"
5#include <bu/archivebase.h>
5 6
6/** 7/**
7 * A build variable, which is basically a flexible, limited type range variant. 8 * A build variable, which is basically a flexible, limited type range variant.
8 */ 9 */
9class Variable 10class Variable
10{ 11{
12friend Bu::ArchiveBase &operator<<( Bu::ArchiveBase &ar, const Variable &v );
13friend Bu::ArchiveBase &operator>>( Bu::ArchiveBase &ar, Variable &v );
11public: 14public:
12 enum Type 15 enum Type
13 { 16 {
@@ -112,4 +115,7 @@ namespace Bu
112Bu::Formatter &operator<<( Bu::Formatter &f, const Variable::Type &t ); 115Bu::Formatter &operator<<( Bu::Formatter &f, const Variable::Type &t );
113Bu::Formatter &operator<<( Bu::Formatter &f, const Variable &v ); 116Bu::Formatter &operator<<( Bu::Formatter &f, const Variable &v );
114 117
118Bu::ArchiveBase &operator<<( Bu::ArchiveBase &ar, const Variable &v );
119Bu::ArchiveBase &operator>>( Bu::ArchiveBase &ar, Variable &v );
120
115#endif 121#endif