<commit_before>#ifndef CONCURRENTMAP_HPP_
#define CONCURRENTMAP_HPP_

// Author: <NAME>

/*
Спроектировать и реализовать потокобезопасный мап со следующими свойствами:
- Ключем и значением является строка.
- Потоки могут получать эксклюзивный доступ к записям в мапе.
- Только поток получивший эксклюзивный доступ к записи может менять её
значение.
- Один поток может получить эксклюзивный доступ к нескольким записям.
- Если потоку нужно обратиться к записи, которая в эксклюзивном доступе
у другого потока, то он должен ждать пока запись освободится.
- Если запрашивается доступ к записи, которой нет в мапе, то создается
и возвращается новая запись.

При решении допускается использование только чистого c++11.
*/

#include <string>
#include <map>
#include <vector>
#include <mutex>
#include <memory>
#include <iostream>

using namespace std;

class ConcurrentMap
{
    // == DATA ==
private:
    class Node
    {
    public:
        Node(const string& str) : mtx(new mutex()), value(str) {}

        unique_ptr<mutex> mtx;
        string value;
    };

    map<string, Node> m_map;
    recursive_mutex m_mutex;

	// == METHODS ==
public:
    explicit ConcurrentMap() {}
    ~ConcurrentMap();<commit_msg>Remove extra text<commit_after>#ifndef CONCURRENTMAP_HPP_
#define CONCURRENTMAP_HPP_

#include <string>
#include <map>
#include <vector>
#include <mutex>
#include <memory>
#include <iostream>

using namespace std;

class ConcurrentMap
{
    // == DATA ==
private:
    class Node
    {
    public:
        Node(const string& str) : mtx(new mutex()), value(str) {}

        unique_ptr<mutex> mtx;
        string value;
    };

    map<string, Node> m_map;
    recursive_mutex m_mutex;

	// == METHODS ==
public:
    explicit ConcurrentMap() {}
    ~ConcurrentMap();
{'fraction_non_alphanumeric': 0.09887005649717515, 'fraction_numerical': 0.0011299435028248588, 'mean_word_length': 3.735294117647059, 'pattern_counts': {'":': 0, '<': 20, '<?xml version=': 0, '>': 20, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4110698', 'n_tokens_mistral': 648, 'n_tokens_neox': 683, 'n_words': 179}