8#ifndef HPP_ALIB_FILES_FTREE
9#define HPP_ALIB_FILES_FTREE 1
11#if !defined(HPP_ALIB_FILES_FINFO)
15#if !defined(HPP_ALIB_MONOMEM_STRINGTREE)
19#if !defined (HPP_ALIB_CAMP_DIRECTORY)
23#if !defined (HPP_ALIB_ENUMS_ITERABLE_BITSET)
28namespace alib {
namespace files {
72 template<
typename TTree>
80 node.name.storage.DbgDisableBufferReplacementWarning();
81 ALIB_DBG(
const auto* internalBuffer= node.name.storage.Buffer(); )
82 node.name.storage.Append(key);
84 if( internalBuffer != node.name.storage.Buffer() )
103 template<
typename TTree>
106 void FreeNode( TTree& tree,
typename TTree::Node& node );
236#if !defined(ALIB_DOX)
237template<
typename TTree>
242 node.name.storage.~TLocalString();
246 FInfo& value= node.data;
248 if( extendedInfo ==
nullptr )
259 FTree::LinkedEISL* recycle=
reinterpret_cast<FTree::LinkedEISL*
>(extendedInfo );
266 "CAMP/FILES",
"Given node is not a directory or symbolic link but still has extendedInfo set.")
269 FTree::LinkedEISLDir* recycle= reinterpret_cast<
FTree::LinkedEISLDir*>(extendedInfo);
270 recycle->next= fTree.recyclerEISlDir;
271 fTree.recyclerEISlDir= recycle;
275 ALIB_DBG( value.SetExtendedInfo(
nullptr) );
306 unsigned int depth = (std::numeric_limits<unsigned int>::max)() );
@ DIRECTORY
Directory/folder.
constexpr ExtendedEntryInfo * GetExtendedInfo() const
constexpr Types Type() const noexcept
ALIB_API void AllocateExtendedInfo(Cursor &node, String &symLinkDest, String &symLinkRealPath)
static ALIB_API void FixSums(Cursor directoryNode)
LinkedEISLDir * recyclerEISlDir
Linked list hook for recycling information elements of disposed nodes.
LinkedEIDir * recyclerEIDir
Linked list hook for recycling information elements of disposed nodes.
ALIB_API integer CountRecyclables(FInfo::Types type)
LinkedEISL * recyclerEISL
Linked list hook for recycling information elements of disposed nodes.
#define ALIB_ASSERT_ERROR(cond,...)
alib::strings::TLocalString< character, 512 > PathString
ALIB_API AString & DbgDump(AString &target, FTree &tree, EnumBitSet< FInfo::Types > includedTypes=EnumBitSet< FInfo::Types >(true), FTree::Cursor startNode=FTree::Cursor(), unsigned int depth=(std::numeric_limits< unsigned int >::max)())
ALIB_API uinteger DbgStatsStringTreeNameOverflows
ALIB_API uinteger DbgStatsStringTreeNames
characters::character character
Type alias in namespace alib.
files::FTree FTree
Type alias in namespace alib.
lang::integer integer
Type alias in namespace alib.
FInfo::EIDirectory data
The usable data receivable with the FInfo instance.
LinkedEIDir * next
A recursive link to implement a recyling list.
LinkedEISLDir * next
A recursive link to implement a recyling list.
FInfo::EISymLinkDir data
The usable data receivable with the FInfo instance.
FInfo::EISymLinkFile data
The usable data receivable with the FInfo instance.
LinkedEISL * next
A recursive link to implement a recyling list.
static void InitializeNode(TTree &tree, typename TTree::Node &node)
strings::TLocalString< character, 100 > NameStringType
static void FreeNode(TTree &tree, typename TTree::Node &node)