| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- /******************************************************************************/
- struct _Map // Map (base) - Do not use this class, use 'Map' instead
- {
- struct Desc
- {
- UInt flag;
- };
- struct Elm
- {
- };
- Int elms ()C {return _elms;}
- Int dataSize()C {return _data_size;} // get size of DATA element
- CPtr key (Int i)C;
- Ptr operator[](Int i) ;
- CPtr operator[](Int i)C {return ConstCast(T)[i];}
- ~_Map() {del();}
- private:
- Byte _mode;
- Int _elms, _key_offset, /*_data_offset, */_desc_offset, _data_size;
- Elm **_order;
- Memx<Elm> _memx;
- Ptr _user;
- Int (*_compare )(CPtr key_a, CPtr key_b);
- Bool (*_create )( Ptr elm , CPtr key , Ptr user);
- void (*_copy_key)( Ptr dest , CPtr src );
- Byte mode(Byte mode);
- CPtr dataInMapToKeyRef(CPtr data)C {return (Byte*)data /*-_data_offset*/ + _key_offset;} // assumes that '_data_offset' is zero
- CPtr dataInMapToKeyPtr(CPtr data)C {return data ? dataInMapToKeyRef(data) : null;}
- CPtr absKey (Int abs_i)C;
- CPtr absData(Int abs_i)C;
- void from(C _Map &src);
- #if EE_PRIVATE
- Desc& elmDesc( Elm &elm )C {return *(Desc*)((Byte*)&elm+_desc_offset);}
- C Desc& elmDesc(C Elm &elm )C {return *(Desc*)((Byte*)&elm+_desc_offset);}
- Ptr elmKey ( Elm &elm )C {return (Byte*)&elm+ _key_offset ;}
- CPtr elmKey (C Elm &elm )C {return (Byte*)&elm+ _key_offset ;}
- Ptr elmData( Elm &elm )C {return (Byte*)&elm/*+_data_offset*/ ;} // assumes that '_data_offset' is zero
- CPtr elmData(C Elm &elm )C {return (Byte*)&elm/*+_data_offset*/ ;} // assumes that '_data_offset' is zero
- Elm* dataElm( CPtr data)C {return (Elm *)((Byte*)data/*-_data_offset*/);} // assumes that '_data_offset' is zero
- Elm* findElm(CPtr key, Int &stop )C;
- void addToOrder( Elm &elm, Int index);
- void removeFromOrder( Int index);
- void getFailed()C;
- Bool containsElm(C Elm *elm)C {return _memx.contains(elm);}
- Int dataInMapToAbsIndex(CPtr data)C;
- #endif
- void clear();
- void del ();
- Ptr find (CPtr key)C;
- Ptr get (CPtr key);
- Ptr operator()(CPtr key);
- Int findAbsIndex(CPtr key)C;
- Int getAbsIndex(CPtr key);
- Int requireAbsIndex(CPtr key);
- Bool containsKey (CPtr key )C;
- Bool containsData(CPtr data)C;
- CPtr dataToKey (CPtr data)C;
- Int dataToIndex (CPtr data)C;
-
- void remove (Int i );
- void removeKey (CPtr key );
- void removeData(CPtr data);
- Bool replaceKey(CPtr src, CPtr dest);
- explicit _Map(Int block_elms, Int compare(CPtr key_a, CPtr key_b), Bool create(Ptr data, CPtr key, Ptr user), Ptr user, void (©_key)(Ptr dest, CPtr src));
- NO_COPY_CONSTRUCTOR(_Map);
- friend struct _MapTS;
- T2(KEY,DATA) friend struct Map;
- T2(KEY,DATA) friend struct ThreadSafeMap;
- };
- /******************************************************************************/
- STRUCT(_MapTS , _Map) // Map Thread Safe (base) - Do not use this class, use 'ThreadSafeMap' instead
- //{
- void lock()C;
- void unlock()C;
- ~_MapTS() {del();}
- private:
- mutable Byte _d_lock;
- SyncLock _lock;
- void clear();
- void del ();
- Ptr find (CPtr key)C;
- Ptr get (CPtr key);
- Ptr operator()(CPtr key);
- Int findAbsIndex(CPtr key)C;
- Int getAbsIndex(CPtr key);
- Int requireAbsIndex(CPtr key);
- Bool containsKey (CPtr key )C;
- Bool containsData(CPtr data)C;
- CPtr dataToKey (CPtr data)C;
- Int dataToIndex (CPtr data)C;
-
- void remove (Int i );
- void removeKey (CPtr key );
- void removeData(CPtr data);
- Bool replaceKey(CPtr src, CPtr dest);
- explicit _MapTS(Int block_elms, Int compare(CPtr key_a, CPtr key_b), Bool create(Ptr data, CPtr key, Ptr user), Ptr user, void (©_key)(Ptr dest, CPtr src));
- T2(KEY,DATA) friend struct ThreadSafeMap;
- };
- /******************************************************************************/
|