summaryrefslogtreecommitdiff
path: root/fileHierarchy.h
diff options
context:
space:
mode:
Diffstat (limited to 'fileHierarchy.h')
-rw-r--r--fileHierarchy.h45
1 files changed, 34 insertions, 11 deletions
diff --git a/fileHierarchy.h b/fileHierarchy.h
index 5d97393a..ef439c29 100644
--- a/fileHierarchy.h
+++ b/fileHierarchy.h
@@ -49,9 +49,9 @@ enum SelectedSide
class FileContainer;
class FileMapping;
class DirMapping;
-class CompareProcess;
class FileSystemObject;
class BaseDirMapping;
+class HierarchyObject;
//------------------------------------------------------------------
/*
DirContainer FileContainer
@@ -160,25 +160,22 @@ public:
const FileDescriptor& right);
const Zstring& getRelativeNamePf() const; //get name relative to base sync dir with FILE_NAME_SEPARATOR postfix: "blah\"
- template <SelectedSide side> const Zstring& getBaseDir() const //postfixed!
- {
- return side == LEFT_SIDE ? baseDirLeft : baseDirRight;
- }
+ template <SelectedSide side> const Zstring& getBaseDir() const; //postfixed!
- typedef std::vector<FileMapping> SubFileMapping;
- typedef std::vector<DirMapping> SubDirMapping;
+ typedef std::vector<FileMapping> SubFileMapping; //MergeSides::execute() requires a structure that doesn't invalidate pointers after push_back()
+ typedef std::vector<DirMapping> SubDirMapping; //Note: deque<> has circular reference in VCPP!
SubDirMapping& useSubDirs();
SubFileMapping& useSubFiles();
- const SubDirMapping& useSubDirs() const;
+ const SubDirMapping& useSubDirs() const;
const SubFileMapping& useSubFiles() const;
protected:
//constructor used by DirMapping
HierarchyObject(const HierarchyObject& parent, const Zstring& shortName) :
relNamePf(parent.getRelativeNamePf() + shortName + globalFunctions::FILE_NAME_SEPARATOR),
- baseDirLeft(parent.getBaseDir<LEFT_SIDE>()),
- baseDirRight(parent.getBaseDir<RIGHT_SIDE>()) {}
+ baseDirLeft(parent.baseDirLeft),
+ baseDirRight(parent.baseDirRight) {}
//constructor used by BaseDirMapping
HierarchyObject(const Zstring& dirPostfixedLeft,
@@ -198,6 +195,21 @@ private:
Zstring baseDirRight; //directory name ending with FILE_NAME_SEPARATOR
};
+template <>
+inline
+const Zstring& HierarchyObject::getBaseDir<LEFT_SIDE>() const //postfixed!
+{
+ return baseDirLeft;
+}
+
+
+template <>
+inline
+const Zstring& HierarchyObject::getBaseDir<RIGHT_SIDE>() const //postfixed!
+{
+ return baseDirRight;
+}
+
//------------------------------------------------------------------
struct RelNamesBuffered
@@ -248,7 +260,7 @@ public:
void synchronizeSides(); //copy one side to the other (NOT recursive!!!)
template <SelectedSide side> void removeObject(); //removes file or directory (recursively!): used by manual deletion
bool isEmpty() const; //true, if both sides are empty
- static void removeEmpty(BaseDirMapping& baseDir); //remove all invalid entries (where both sides are empty) recursively
+ static void removeEmpty(BaseDirMapping& baseDir); //remove all invalid entries (where both sides are empty) recursively
static void removeEmptyNonRec(HierarchyObject& hierObj); //remove all invalid entries (where both sides are empty) non-recursively
protected:
@@ -428,6 +440,17 @@ bool isDirectoryMapping(const FileSystemObject& fsObj);
+
+
+
+
+
+
+
+
+
+
+
//---------------Inline Implementation---------------------------------------------------
inline
FileSystemObject* HierarchyObject::retrieveById(ObjectID id) //returns NULL if object is not found
bgstack15