-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFileInfoList.h
147 lines (109 loc) · 3.59 KB
/
FileInfoList.h
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
// Copyright (C) 2009,2010,2011,2012 GlavSoft LLC.
// All rights reserved.
//
//-------------------------------------------------------------------------
// This file is part of the TightVNC software. Please visit our Web site:
//
// http://www.tightvnc.com/
//
// 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 _FILE_INFO_LIST_H_
#define _FILE_INFO_LIST_H_
#include "ft-common/FileInfo.h"
//
// 2D two-side linked list class with FileInfo data inside
// specified for using in recursive file transfer client operations
// like recursive files removal, coping files trees etc.
//
//
// Remark: class is owner of it m_next and m_child lists,
// it must care about memory allocated for it.
//
// Class allocates memory for m_next list and m_child list
// by own hands and frees memory when it's needed.
//
class FileInfoList
{
public:
//
// Creates empty 2d two-side linked list with fileInfo data inside
//
FileInfoList(FileInfo fileInfo);
//
// Creates 1d two-side linked list with data from filesInfo array
//
FileInfoList(const FileInfo *filesInfo, size_t count);
//
// Frees memory from next and child lists
//
~FileInfoList();
//
// Creates new file info list from filesInfo array and set it to child
// of this list (also it creates backward "child to parent" relationship).
//
void setChild(const FileInfo *filesInfo, size_t count);
//
// Returns child of this list or 0 if no child
//
FileInfoList *getChild();
//
// Returns parent of this list or 0 if no parent
//
FileInfoList *getParent();
//
// Returns top root (beggining of all list tree), cannot be 0, always valid list pointer
//
FileInfoList *getRoot();
//
// Returns top first (begging of this leaf) element in this list
//
FileInfoList *getFirst();
//
// Returns next list element or 0 if no next list
//
FileInfoList *getNext();
//
// Returns previous list element or 0 if no such list
//
FileInfoList *getPrev();
//
// Sets file info hold by this list
//
void setFileInfo(FileInfo fileInfo);
//
// Returns file info hold by this list
//
FileInfo *getFileInfo();
//
// Sets absolute filename (calculated by parent files) associated
// with hold file info in this list to storage variable.
//
// directorySeparator is char that used to split directories strings.
//
void getAbsolutePath(StringStorage *storage, TCHAR directorySeparator);
protected:
void setNext(FileInfoList *next);
void setPrev(FileInfoList *prev);
static FileInfoList *fromArray(const FileInfo *filesInfo, size_t count);
protected:
FileInfoList *m_child;
FileInfoList *m_parent;
FileInfoList *m_next;
FileInfoList *m_prev;
FileInfo m_fileInfo;
};
#endif