Files
commandergenius/project/jni/application/enigma/src/lev/PersistentIndex.hh
2010-10-13 17:30:44 +03:00

135 lines
4.9 KiB
C++

/*
* Copyright (C) 2006 Ronald Lamprecht
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef LEV_PERSISTENTINDEX_HH_INCLUDED
#define LEV_PERSISTENTINDEX_HH_INCLUDED
#include "lev/Index.hh"
#include <string>
#include <istream>
#include <xercesc/dom/DOMDocument.hpp>
#define INDEX_STD_FILENAME "index.xml"
namespace enigma { namespace lev {
struct Variation {
// Constructor
Variation(controlType ctrlValue = force, scoreUnitType unitValue = duration,
std::string targetValue = "time");
controlType ctrl;
scoreUnitType unit;
std::string target;
std::map<std::string, std::string> extensions;
bool operator == (const Variation& otherVar);
};
/**
*
*/
class PersistentIndex : public Index {
public:
static void registerPersistentIndices(bool onlySystemIndices);
static PersistentIndex * historyIndex;
static void addCurrentToHistory();
/**
* Convention: method names *Level() can take int pos or Proxy as arg.
*/
/**
*
* thePackPath " " for a new not yet defined path
*/
PersistentIndex(std::string thePackPath, bool systemOnly,
double defaultLocation = INDEX_DEFAULT_PACK_LOCATION,
std::string anIndexName = "",
std::string theIndexFilename = INDEX_STD_FILENAME,
std::string aGroupName = INDEX_DEFAULT_GROUP);
/**
* Legacy 0.92 constructor - called once to convert the index to XML.
* When the index has been stored as XML this constructor will not be
* called again.
*/
PersistentIndex(std::istream *legacyIndex, std::string thePackPath, bool isZip = false,
std::string anIndexName = "", std::string theIndexFilename = INDEX_STD_FILENAME);
~PersistentIndex();
void load(bool systemOnly, bool update = false);
void loadDoc();
std::string getPackPath();
bool setName(std::string newName);
std::string getOwner();
void setOwner(std::string newOwner);
int getRelease();
void setRelease(int newRelease);
int getRevision();
void setRevision(int newRevision);
double getCompatibility();
void setCompatibility(double newCompatibility);
bool isUserEditable();
bool isUpdatable();
bool isCross();
void markNewAsCross();
virtual void clear();
virtual void appendProxy(Proxy * newLevel, controlType varCtrl = force,
scoreUnitType varUnit = duration, std::string varTarget = "time",
std::map<std::string, std::string> varExtensions = nullExtensions);
void insertProxy(int pos, Proxy * newLevel, bool allowDuplicates = true,
controlType varCtrl = force, scoreUnitType varUnit = duration,
std::string varTarget = "time",
std::map<std::string, std::string> varExtensions = nullExtensions);
Variation getVariation(int pos);
void erase(int pos);
void exchange(int pos1, int pos2);
virtual bool isSource(Proxy * aProxy);
bool save(bool allowOverwrite = true);
protected:
std::string packPath; // "auto", "",...
std::string indexFilename;
std::string owner;
int release;
int revision;
double compatibility;
std::vector<Variation> variations;
bool isModified;
bool isUserOwned;
bool isEditable;
std::string indexUrl;
private:
static std::vector<PersistentIndex *> indexCandidates;
std::string absIndexPath;
XERCES_CPP_NAMESPACE_QUALIFIER DOMDocument *doc;
XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *infoElem;
XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *updateElem;
XERCES_CPP_NAMESPACE_QUALIFIER DOMElement *levelsElem;
static void checkCandidate(PersistentIndex * candidate);
// legacy 0.92
void parsePar(const string& par, int& par_value, std::string& par_text);
};
void AddLevelPack (const char *init_file, const char *name);
void AddZippedLevelPack (const char *zipfile);
}} // namespace enigma::lev
#endif