Mcucpp

Форк
0
/
findnodelister.cpp 
82 строки · 1.3 Кб
1

2
#include <filesystem/findnodelister.h>
3

4
namespace Mcucpp
5
{
6
namespace Fs
7
{
8
	FindNodeLister::FindNodeLister(IFsDriver &driver)
9
		:_filePath(nullptr),
10
		_driver(driver),
11
		_found(false),
12
		_pathMatched(false),
13
		_foundEntry(nullptr)
14
	{
15
		
16
	}
17

18
	bool FindNodeLister::Find(const uint8_t *filePath, FileSystemEntry *foundEntry)
19
	{
20
		if(foundEntry == nullptr || filePath == nullptr)
21
		{
22
			return false;
23
		}
24
		_filePath = filePath;
25
		_currentNode = _driver.RootDirectory();
26
		_found = false;
27
		_pathMatched = false;
28
		_foundEntry = foundEntry;
29
		do
30
		{
31
			if(!_driver.ListDirectory(_currentNode, *this))
32
			{
33
				return false;
34
			}
35
			if(!_pathMatched)
36
			{
37
				return false;
38
			}
39
		}while(!_found);
40
		return true;
41
	}
42

43
	bool FindNodeLister::DirectoryEntry(const FileSystemEntry &entry)
44
	{
45
		if(PathElementMatch(entry.Name()))
46
		{
47
			_currentNode = entry.Node();
48
			_pathMatched = true;
49
			*_foundEntry = entry;
50
			return false;
51
		}
52
		else
53
		{
54
			_pathMatched = false;
55
		}
56
		return true;
57
	}
58

59
	bool FindNodeLister::PathElementMatch(const uint8_t *name)
60
	{
61
		const uint8_t *pathPtr = _filePath;
62
		while(*pathPtr == PathDelim)
63
		{
64
			pathPtr++;
65
		}
66

67
		do
68
		{
69
			if(*pathPtr == PathDelim)
70
			{
71
				_filePath = pathPtr;
72
				return true;
73
			}
74
			if(*pathPtr == 0)
75
			{
76
				_found = true;
77
				return true;
78
			}
79
		}while(*pathPtr++ == *name++);
80
		return false;
81
	}
82
		
83
}}

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.