alternative Standard Libary  0.29.8
std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator > Template-Klassenreferenz

#include <hash_map.hpp>

Öffentliche Typen

using value_type = std::pair< TKey, TValue >
 
using key_type = TKey
 
using mapped_type = TValue
 
using allocator_type = TAllocator
 
using iterator = node_iterator< node *, value_type *, value_type & >
 
using const_iterator = node_iterator< const node *, const value_type *, const value_type & >
 
using size_type = int
 

Öffentliche Methoden

 hash_map ()
 
 hash_map (const allocator_type &allocator)
 
 hash_map (size_type initial_bucket_count, const allocator_type &allocator=allocator_type())
 
 hash_map (size_type initial_bucket_count, const THashFunc &hashFunc, const allocator_type &allocator=allocator_type())
 
 hash_map (const hash_map &rhs, const allocator_type &allocator=allocator_type())
 
 hash_map (e_noinitialize)
 
 ~hash_map ()
 
iterator begin ()
 
const_iterator begin () const
 
iterator end ()
 
const_iterator end () const
 
mapped_typeoperator[] (const key_type &key)
 
hash_mapoperator= (const hash_map &rhs)
 
void swap (hash_map &rhs)
 
std::pair< iterator, bool > insert (const value_type &v)
 
size_type erase (const key_type &key)
 
void erase (iterator it)
 
void erase (iterator from, iterator to)
 
iterator find (const key_type &key)
 
const_iterator find (const key_type &key) const
 
void clear ()
 
void reserve (size_type min_size)
 
size_type bucket_count () const
 
size_type size () const
 
size_type empty () const
 
size_type nonempty_bucket_count () const
 
size_type used_memory () const
 
const allocator_typeget_allocator () const
 
void set_allocator (const allocator_type &allocator)
 

Statische öffentliche Attribute

static const size_type kNodeSize = sizeof(node)
 
static const size_type kInitialCapacity = 64
 

Ausführliche Beschreibung

template<typename TKey, typename TValue, class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
class std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >

Dokumentation der benutzerdefinierten Datentypen

◆ allocator_type

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
using std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::allocator_type = TAllocator

◆ const_iterator

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
using std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::const_iterator = node_iterator<const node*, const value_type*, const value_type&>

◆ iterator

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
using std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::iterator = node_iterator<node*, value_type*, value_type&>

◆ key_type

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
using std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::key_type = TKey

◆ mapped_type

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
using std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::mapped_type = TValue

◆ size_type

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
using std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::size_type = int

◆ value_type

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
using std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::value_type = std::pair<TKey, TValue>

Beschreibung der Konstruktoren und Destruktoren

◆ hash_map() [1/6]

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::hash_map ( )
inline
155  : m_nodes(&ms_emptyNode), m_size(0), m_capacity(0), m_capacityMask(0), m_numUsed(0)
156  {
157  assert((kInitialCapacity & (kInitialCapacity - 1)) == 0); // Must be power-of-two
158  }
static const size_type kInitialCapacity
Definition: hash_map.hpp:153

◆ hash_map() [2/6]

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::hash_map ( const allocator_type allocator)
inlineexplicit
160  : m_nodes(&ms_emptyNode), m_size(0), m_capacity(0), m_capacityMask(0), m_numUsed(0), m_allocator(allocator)
161  {
162  }

◆ hash_map() [3/6]

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::hash_map ( size_type  initial_bucket_count,
const allocator_type allocator = allocator_type() 
)
inlineexplicit
164  : m_nodes(&ms_emptyNode), m_size(0), m_capacity(0), m_capacityMask(0), m_numUsed(0), m_allocator(allocator)
165  {
166  reserve(initial_bucket_count);
167  }
void reserve(size_type min_size)
Definition: hash_map.hpp:338

◆ hash_map() [4/6]

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::hash_map ( size_type  initial_bucket_count,
const THashFunc &  hashFunc,
const allocator_type allocator = allocator_type() 
)
inline
169  : m_nodes(&ms_emptyNode), m_size(0), m_capacity(0), m_capacityMask(0), m_numUsed(0), m_hashFunc(hashFunc), m_allocator(allocator)
170  {
171  reserve(initial_bucket_count);
172  }
void reserve(size_type min_size)
Definition: hash_map.hpp:338

◆ hash_map() [5/6]

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::hash_map ( const hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator > &  rhs,
const allocator_type allocator = allocator_type() 
)
inline
174  : m_nodes(&ms_emptyNode), m_size(0), m_capacity(0), m_capacityMask(0), m_numUsed(0), m_allocator(allocator)
175  {
176  *this = rhs;
177  }

◆ hash_map() [6/6]

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::hash_map ( e_noinitialize  )
inlineexplicit
179  {
180 
181  }

◆ ~hash_map()

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::~hash_map ( )
inline
183  {
184  delete_nodes();
185  }

Dokumentation der Elementfunktionen

◆ begin() [1/2]

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
iterator std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::begin ( )
inline
188  {
189  iterator it(m_nodes, this);
190  it.move_to_next_occupied_node();
191  return it;
192  }
node_iterator< node *, value_type *, value_type & > iterator
Definition: hash_map.hpp:149

◆ begin() [2/2]

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
const_iterator std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::begin ( ) const
inline
194  {
195  const_iterator it(m_nodes, this);
196  it.move_to_next_occupied_node();
197  return it;
198  }
node_iterator< const node *, const value_type *, const value_type & > const_iterator
Definition: hash_map.hpp:150

◆ bucket_count()

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
size_type std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::bucket_count ( ) const
inline
348  {
349  return m_capacity;
350  }

◆ clear()

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
void std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::clear ( )
inline
321  {
322  node* endNode = m_nodes + m_capacity;
323  for (node* iter = m_nodes; iter != endNode; ++iter)
324  {
325  if( iter )
326  {
327  if (iter->is_occupied())
328  {
329  std::destruct(&iter->data);
330  }
331  iter->hash = node::kUnusedHash;
332  }
333  }
334  m_size = 0;
335  m_numUsed = 0;
336  }
void destruct(T *mem)
Definition: algorithm.hpp:31

◆ empty()

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
size_type std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::empty ( ) const
inline
356  {
357  return size() == 0;
358  }
size_type size() const
Definition: hash_map.hpp:351

◆ end() [1/2]

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
iterator std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::end ( )
inline
200  {
201  return iterator(m_nodes + m_capacity, this);
202  }
node_iterator< node *, value_type *, value_type & > iterator
Definition: hash_map.hpp:149

◆ end() [2/2]

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
const_iterator std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::end ( ) const
inline
204  {
205  return const_iterator(m_nodes + m_capacity, this);
206  }
node_iterator< const node *, const value_type *, const value_type & > const_iterator
Definition: hash_map.hpp:150

◆ erase() [1/3]

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
size_type std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::erase ( const key_type key)
inline
281  {
282  node* n = lookup(key);
283  if (n != (m_nodes + m_capacity) && n->is_occupied())
284  {
285  erase_node(n);
286  return 1;
287  }
288  return 0;
289  }

◆ erase() [2/3]

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
void std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::erase ( iterator  it)
inline
291  {
292  assert(it.get_map() == this);
293  if (it != end())
294  {
295  assert(!empty());
296  erase_node(it.node());
297  }
298  }
size_type empty() const
Definition: hash_map.hpp:355
iterator end()
Definition: hash_map.hpp:199

◆ erase() [3/3]

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
void std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::erase ( iterator  from,
iterator  to 
)
inline
300  {
301  for (; from != to; ++from)
302  {
303  node* n = from.node();
304  if (n->is_occupied())
305  erase_node(n);
306  }
307  }

◆ find() [1/2]

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
iterator std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::find ( const key_type key)
inline
310  {
311  node* n = lookup(key);
312  return iterator(n, this);
313  }
node_iterator< node *, value_type *, value_type & > iterator
Definition: hash_map.hpp:149

◆ find() [2/2]

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
const_iterator std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::find ( const key_type key) const
inline
315  {
316  const node* n = lookup(key);
317  return const_iterator(n, this);
318  }
node_iterator< const node *, const value_type *, const value_type & > const_iterator
Definition: hash_map.hpp:150

◆ get_allocator()

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
const allocator_type& std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::get_allocator ( ) const
inline
369  {
370  return m_allocator;
371  }

◆ insert()

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
std::pair<iterator, bool> std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::insert ( const value_type v)
inline
257  {
258  typedef std::pair<iterator, bool> ret_type_t;
259  assert(invariant());
260  if (m_numUsed * TLoadFactor4 >= m_capacity * 4)
261  grow();
262 
263  hash_value_t hash;
264  node* n = find_for_insert(v.first, &hash);
265  if (n->is_occupied())
266  {
267  assert(hash == n->hash && m_keyEqualFunc(v.first, n->data.first));
268  return ret_type_t(iterator(n, this), false);
269  }
270  if (n->is_unused())
271  ++m_numUsed;
272 
273  std::copy_construct(&n->data, v);
274  n->hash = hash;
275  ++m_size;
276  assert(invariant());
277  return ret_type_t(iterator(n, this), true);
278  }
void copy_construct(T *mem, const T &orig)
Definition: algorithm.hpp:23
node_iterator< node *, value_type *, value_type & > iterator
Definition: hash_map.hpp:149
Definition: pair.hpp:39
unsigned long hash_value_t
Definition: hash.hpp:74

◆ nonempty_bucket_count()

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
size_type std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::nonempty_bucket_count ( ) const
inline
360  {
361  return m_numUsed;
362  }

◆ operator=()

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
hash_map& std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::operator= ( const hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator > &  rhs)
inline
220  {
221  assert(invariant());
222  if (&rhs != this)
223  {
224  clear();
225  if (m_capacity < rhs.bucket_count())
226  {
227  delete_nodes();
228  m_nodes = allocate_nodes(rhs.bucket_count());
229  m_capacity = rhs.bucket_count();
230  m_capacityMask = m_capacity - 1;
231  }
232  rehash(m_capacity, m_nodes, rhs.m_capacity, rhs.m_nodes, false);
233  m_size = rhs.size();
234  m_numUsed = rhs.m_numUsed;
235  }
236  assert(invariant());
237  return *this;
238  }
void clear()
Definition: hash_map.hpp:320

◆ operator[]()

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
mapped_type& std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::operator[] ( const key_type key)
inline
209  {
210  hash_value_t hash;
211  node* n = find_for_insert(key, &hash);
212  if (n == 0 || !n->is_occupied())
213  {
214  return insert_at(value_type(key, TValue()), n, hash).first->second;
215  }
216  return n->data.second;
217  }
std::pair< TKey, TValue > value_type
Definition: hash_map.hpp:48
unsigned long hash_value_t
Definition: hash.hpp:74

◆ reserve()

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
void std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::reserve ( size_type  min_size)
inline
339  {
340  size_type newCapacity = (m_capacity == 0 ? kInitialCapacity : m_capacity);
341  while (newCapacity < min_size)
342  newCapacity *= 2;
343  if (newCapacity > m_capacity)
344  grow(newCapacity);
345  }
static const size_type kInitialCapacity
Definition: hash_map.hpp:153
int size_type
Definition: hash_map.hpp:151

◆ set_allocator()

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
void std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::set_allocator ( const allocator_type allocator)
inline
373  {
374  m_allocator = allocator;
375  }

◆ size()

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
size_type std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::size ( ) const
inline
352  {
353  return m_size;
354  }

◆ swap()

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
void std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::swap ( hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator > &  rhs)
inline
240  {
241  if (&rhs != this)
242  {
243  assert(invariant());
244  assert(m_allocator == rhs.m_allocator);
245  std::swap(m_nodes, rhs.m_nodes);
246  std::swap(m_size, rhs.m_size);
247  std::swap(m_capacity, rhs.m_capacity);
248  std::swap(m_capacityMask, rhs.m_capacityMask);
249  std::swap(m_numUsed, rhs.m_numUsed);
250  std::swap(m_hashFunc, rhs.m_hashFunc);
251  std::swap(m_keyEqualFunc, rhs.m_keyEqualFunc);
252  assert(invariant());
253  }
254  }
void swap(TAssignable &a, TAssignable &b)
Definition: algorithm.hpp:205

◆ used_memory()

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
size_type std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::used_memory ( ) const
inline
364  {
365  return bucket_count() * kNodeSize;
366  }
static const size_type kNodeSize
Definition: hash_map.hpp:152
size_type bucket_count() const
Definition: hash_map.hpp:347

Dokumentation der Datenelemente

◆ kInitialCapacity

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
const size_type std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::kInitialCapacity = 64
static

◆ kNodeSize

template<typename TKey , typename TValue , class THashFunc = std::hash<TKey>, int TLoadFactor4 = 6, class TKeyEqualFunc = std::equal_to<TKey>, class TAllocator = std::allocator>
const size_type std::hash_map< TKey, TValue, THashFunc, TLoadFactor4, TKeyEqualFunc, TAllocator >::kNodeSize = sizeof(node)
static

Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Datei: