[PowerRename] Introduce advanced counter functionality (#27895)

This commit is contained in:
Andrey Nekrasov
2023-08-14 16:53:49 +02:00
committed by GitHub
parent 97d397a576
commit 268614ccd9
24 changed files with 819 additions and 717 deletions

View File

@@ -1,9 +1,8 @@
#pragma once
#include "pch.h"
#include <vector>
#include <string>
#include "srwlock.h"
#include "Enumerating.h"
#include "PowerRenameInterfaces.h"
#define DEFAULT_FLAGS 0
@@ -12,7 +11,7 @@ class CPowerRenameRegEx : public IPowerRenameRegEx
{
public:
// IUnknown
IFACEMETHODIMP QueryInterface(_In_ REFIID iid, _Outptr_ void** resultInterface);
IFACEMETHODIMP QueryInterface(_In_ REFIID iid, _Outptr_ void** resultInterface);
IFACEMETHODIMP_(ULONG) AddRef();
IFACEMETHODIMP_(ULONG) Release();
@@ -27,9 +26,9 @@ public:
IFACEMETHODIMP PutFlags(_In_ DWORD flags);
IFACEMETHODIMP PutFileTime(_In_ SYSTEMTIME fileTime);
IFACEMETHODIMP ResetFileTime();
IFACEMETHODIMP Replace(_In_ PCWSTR source, _Outptr_ PWSTR* result);
IFACEMETHODIMP Replace(_In_ PCWSTR source, _Outptr_ PWSTR* result, unsigned long& enumIndex);
static HRESULT s_CreateInstance(_Outptr_ IPowerRenameRegEx **renameRegEx);
static HRESULT s_CreateInstance(_Outptr_ IPowerRenameRegEx** renameRegEx);
protected:
CPowerRenameRegEx();
@@ -39,6 +38,7 @@ protected:
void _OnReplaceTermChanged();
void _OnFlagsChanged();
void _OnFileTimeChanged();
HRESULT _OnEnumerateItemsChanged();
size_t _Find(std::wstring data, std::wstring toSearch, bool caseInsensitive, size_t pos);
@@ -46,8 +46,9 @@ protected:
DWORD m_flags = DEFAULT_FLAGS;
PWSTR m_searchTerm = nullptr;
PWSTR m_replaceTerm = nullptr;
std::wstring m_RawReplaceTerm;
SYSTEMTIME m_fileTime = {0};
SYSTEMTIME m_fileTime = { 0 };
bool m_useFileTime = false;
CSRWLock m_lock;
@@ -55,6 +56,9 @@ protected:
DWORD m_cookie = 0;
std::vector<Enumerator> m_enumerators;
std::vector<int32_t> m_replaceWithEnumeratorOffsets;
struct RENAME_REGEX_EVENT
{
IPowerRenameRegExEvents* pEvents;