[DEV] continue integration NO STL
This commit is contained in:
parent
1d99aa0112
commit
45fbda3786
96
etk/Map.hpp
96
etk/Map.hpp
@ -3,11 +3,11 @@
|
||||
* @copyright 2011, Edouard DUPIN, all right reserved
|
||||
* @license MPL v2.0 (see license file)
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <etk/types.hpp>
|
||||
|
||||
#pragma once
|
||||
#include <etk/String.hpp>
|
||||
#include <etk/Pair.hpp>
|
||||
#include <etk/Vector.hpp>
|
||||
|
||||
namespace etk {
|
||||
/**
|
||||
@ -189,22 +189,20 @@ namespace etk {
|
||||
*/
|
||||
ETK_MAP_TYPE_DATA& operator-> () const {
|
||||
//TK_CHECK_INOUT(m_current < m_map->size());
|
||||
return &m_map->get(m_current);
|
||||
return &m_map->getValue(m_current);
|
||||
}
|
||||
/**
|
||||
* @brief Get reference on the current Element
|
||||
* @return the reference on the current Element
|
||||
*/
|
||||
ETK_MAP_TYPE_DATA& operator* () const {
|
||||
//TK_CHECK_INOUT(m_current < m_map->size());
|
||||
return m_map->get(m_current);
|
||||
return m_map->getValue(m_current);
|
||||
}
|
||||
/**
|
||||
* @brief Get Key on the current Element
|
||||
* @return the Key on the current Element
|
||||
*/
|
||||
const ETK_MAP_TYPE_KEY& getKey () const {
|
||||
//TK_CHECK_INOUT(m_current < m_map->size());
|
||||
return m_map->getKey(m_current);
|
||||
}
|
||||
/**
|
||||
@ -212,7 +210,6 @@ namespace etk {
|
||||
* @return the Key on the current Element
|
||||
*/
|
||||
const ETK_MAP_TYPE_DATA& getValue () const {
|
||||
//TK_CHECK_INOUT(m_current < m_map->size());
|
||||
return m_map->getValue(m_current);
|
||||
}
|
||||
/**
|
||||
@ -220,7 +217,6 @@ namespace etk {
|
||||
* @return the Key on the current Element
|
||||
*/
|
||||
ETK_MAP_TYPE_DATA& getValue () {
|
||||
//TK_CHECK_INOUT(m_current < m_map->size());
|
||||
return m_map->getValue(m_current);
|
||||
}
|
||||
|
||||
@ -232,17 +228,29 @@ namespace etk {
|
||||
}
|
||||
friend class Map;
|
||||
};
|
||||
static bool defaultSort(etk::Pair<ETK_MAP_TYPE_KEY, ETK_MAP_TYPE_DATA>* const & _key1,
|
||||
etk::Pair<ETK_MAP_TYPE_KEY, ETK_MAP_TYPE_DATA>* const & _key2) {
|
||||
return _key1->first < _key2->first;
|
||||
}
|
||||
private:
|
||||
etk::Vector<etk::Pair<ETK_MAP_TYPE_KEY, ETK_MAP_TYPE_DATA>*> m_data; //!< Data of the Map ==> the Map table is composed of pointer, this permit to have high speed when resize the vector ...
|
||||
bool m_ordered;
|
||||
public:
|
||||
/**
|
||||
* @brief Constructor of the Map table.
|
||||
* @param[in] _count Number of basic element in the table.
|
||||
*/
|
||||
Map(int32_t _count = 0) :
|
||||
m_data(_count) {
|
||||
Map(int32_t _count = 0, bool _ordered=true) :
|
||||
m_data(_count),
|
||||
m_ordered(_ordered) {
|
||||
// nothing to do
|
||||
}
|
||||
void setOrdered(bool _ordered) {
|
||||
m_ordered = _ordered;
|
||||
if (m_ordered == true) {
|
||||
m_data.sort(0, m_data.size(), etk::Map<ETK_MAP_TYPE_KEY, ETK_MAP_TYPE_DATA>::defaultSort);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* @brief Destructor of the Map table (clear all element in the table)
|
||||
*/
|
||||
@ -268,15 +276,16 @@ namespace etk {
|
||||
* @return Id of the element in the table or -1 of it does not existed
|
||||
*/
|
||||
int64_t getId(const ETK_MAP_TYPE_KEY& _key) const {
|
||||
if (m_ordered == true) {
|
||||
// TODO: search in a dichotomic way.
|
||||
}
|
||||
for (size_t iii=0; iii<m_data.size(); iii++) {
|
||||
if (m_data[iii] != nullptr) {
|
||||
//TK_INFO("Compare key : '" << m_data[iii]->m_key << "' with '" << _key << "'" );
|
||||
if (m_data[iii]->first == _key) {
|
||||
return iii;
|
||||
}
|
||||
}
|
||||
}
|
||||
//TK_ERROR(" ==> not fund key '" << _key << "'" );
|
||||
return -1;
|
||||
}
|
||||
/**
|
||||
@ -286,12 +295,9 @@ namespace etk {
|
||||
*/
|
||||
bool exist(const ETK_MAP_TYPE_KEY& _name) const {
|
||||
int64_t elementId = getId(_name);
|
||||
//TK_INFO(" Exist ? '" << _name << "' id=" << elementId );
|
||||
if (elementId<0) {
|
||||
//TK_INFO(" ==> return false" );
|
||||
return false;
|
||||
}
|
||||
//TK_INFO(" ==> return true" );
|
||||
return true;
|
||||
}
|
||||
/**
|
||||
@ -335,10 +341,13 @@ namespace etk {
|
||||
if (elementId <0) {
|
||||
etk::Pair<ETK_MAP_TYPE_KEY, ETK_MAP_TYPE_DATA>* tmp = new etk::Pair<ETK_MAP_TYPE_KEY, ETK_MAP_TYPE_DATA>(etk::move(_key), etk::move(_value));
|
||||
if (tmp == nullptr) {
|
||||
//TK_ERROR("allocation error in Map table : '" << _key << "'");
|
||||
return;
|
||||
}
|
||||
m_data.pushBack(tmp);
|
||||
// Order data if needed.
|
||||
if (m_ordered == true) {
|
||||
m_data.sort(0, m_data.size(), etk::Map<ETK_MAP_TYPE_KEY, ETK_MAP_TYPE_DATA>::defaultSort);
|
||||
}
|
||||
return;
|
||||
}
|
||||
m_data[elementId]->second = _value;
|
||||
@ -356,7 +365,7 @@ namespace etk {
|
||||
* @brief Remove an element in the Map table.
|
||||
* @param[in] _key Name of the element to remove.
|
||||
*/
|
||||
void remove(const ETK_MAP_TYPE_KEY& _key) {
|
||||
void erase(const ETK_MAP_TYPE_KEY& _key) {
|
||||
int64_t elementId = getId(_key);
|
||||
if (elementId <0) {
|
||||
//nothing to do ==> not existed
|
||||
@ -366,6 +375,17 @@ namespace etk {
|
||||
m_data[elementId] = nullptr;
|
||||
m_data.erase(m_data.begin()+elementId);
|
||||
}
|
||||
/**
|
||||
* @brief Remove an element in the Map table.
|
||||
* @param[in] _it Iterator on the element.
|
||||
*/
|
||||
Iterator erase(const Iterator& _it) {
|
||||
int64_t elementId = _it.m_current;
|
||||
delete(m_data[elementId]);
|
||||
m_data[elementId] = nullptr;
|
||||
m_data.erase(m_data.begin()+elementId);
|
||||
return position(elementId);
|
||||
}
|
||||
/**
|
||||
* @brief Get the number of element in the Map table
|
||||
* @return number of elements
|
||||
@ -373,36 +393,12 @@ namespace etk {
|
||||
size_t size() const {
|
||||
return m_data.size();
|
||||
}
|
||||
/**
|
||||
* @brief get an element with his id.
|
||||
* @param[in] _pos Position on the element in the Map table.
|
||||
* @return requested element at this position.
|
||||
* @note this is a dangerous use of the Map table. Maybe you will use a simple vector.
|
||||
*/
|
||||
ETK_MAP_TYPE_DATA& operator[] (size_t _pos) {
|
||||
return getValue(_pos);
|
||||
}
|
||||
/**
|
||||
* @brief get an element with his id.
|
||||
* @param[in] _pos Position on the element in the Map table.
|
||||
* @return requested element at this position.
|
||||
* @note this is a dangerous use of the Map table. Maybe you will use a simple vector.
|
||||
*/
|
||||
const ETK_MAP_TYPE_DATA& operator[] (size_t _pos) const {
|
||||
return getValue(_pos);
|
||||
}
|
||||
/**
|
||||
* @brief Get the name of the element at a specific position.
|
||||
* @param[in] _pos Position of the element in the Map table.
|
||||
* @return name of the element (key).
|
||||
*/
|
||||
const ETK_MAP_TYPE_KEY& getKey(size_t _pos) const {
|
||||
// NOTE :Do not change log level, this generate error only in debug mode
|
||||
#if DEBUG_LEVEL > 2
|
||||
if(_pos>m_data.size()){
|
||||
//TK_CRITICAL("Access to an inexistent data in Map : " << _pos << "/ " << m_data.size());
|
||||
}
|
||||
#endif
|
||||
return m_data[_pos]->m_key;
|
||||
}
|
||||
/**
|
||||
@ -424,24 +420,12 @@ namespace etk {
|
||||
* @return Value available at this position.
|
||||
*/
|
||||
const ETK_MAP_TYPE_DATA& getValue(size_t _pos) const {
|
||||
// NOTE :Do not change log level, this generate error only in debug mode
|
||||
#if DEBUG_LEVEL > 2
|
||||
if(_pos>m_data.size()){
|
||||
//TK_CRITICAL("Access to an inexistent data in Map : " << _pos << "/ " << m_data.size());
|
||||
}
|
||||
#endif
|
||||
return m_data[_pos]->second;
|
||||
}
|
||||
/**
|
||||
* @copydoc getValue (size_t)
|
||||
*/
|
||||
ETK_MAP_TYPE_DATA& getValue(size_t _pos) {
|
||||
// NOTE :Do not change log level, this generate error only in debug mode
|
||||
#if DEBUG_LEVEL > 2
|
||||
if(_pos>m_data.size()){
|
||||
//TK_CRITICAL("Access to an inexistent data in Map : " << _pos << "/ " << m_data.size());
|
||||
}
|
||||
#endif
|
||||
return m_data[_pos]->second;
|
||||
}
|
||||
|
||||
@ -482,14 +466,14 @@ namespace etk {
|
||||
if (elementId <0) {
|
||||
return end();
|
||||
}
|
||||
position(elementId);
|
||||
return position(elementId);
|
||||
}
|
||||
const Iterator find(const ETK_MAP_TYPE_KEY& _key) const {
|
||||
int64_t elementId = getId(_key);
|
||||
if (elementId <0) {
|
||||
return end();
|
||||
}
|
||||
position(elementId);
|
||||
return position(elementId);
|
||||
}
|
||||
|
||||
|
||||
|
@ -13,7 +13,7 @@ namespace etk {
|
||||
class Pair {
|
||||
public:
|
||||
ETK_PAIR_TYPE_1 first;
|
||||
ETK_PAIR_TYPE_1 second;
|
||||
ETK_PAIR_TYPE_2 second;
|
||||
Pair():
|
||||
first(),
|
||||
second() {
|
||||
|
@ -12,6 +12,7 @@
|
||||
#include <etk/stdTools.hpp>
|
||||
#include <etk/String.hpp>
|
||||
#include <etk/UString.hpp>
|
||||
#include <etk/pair.hpp>
|
||||
#include <memory>
|
||||
|
||||
#define TK_REG_DEBUG TK_HIDDEN
|
||||
@ -173,6 +174,9 @@ etk::String autoStr(const etk::String& _data);
|
||||
etk::String autoStr(char _data);
|
||||
etk::String strTick(int32_t _pos);
|
||||
|
||||
class FindProperty;
|
||||
etk::Stream& operator <<(etk::Stream& _os, const FindProperty& _obj);
|
||||
|
||||
/**
|
||||
* @brief Node Elements for every-one
|
||||
* @not-in-doc
|
||||
@ -217,7 +221,7 @@ class FindProperty {
|
||||
void setPositionStop(int64_t _newPos) {
|
||||
m_positionStop = _newPos;
|
||||
if (m_positionStop < m_positionStart) {
|
||||
TK_CRITICAL("set voluntary a stop position before end : " << this << " start=" << m_positionStart << " stop=" << m_positionStop);
|
||||
TK_CRITICAL("set voluntary a stop position before end : " << *this << " start=" << m_positionStart << " stop=" << m_positionStop);
|
||||
}
|
||||
}
|
||||
uint32_t getMultiplicity() const {
|
||||
@ -276,8 +280,6 @@ class FindProperty {
|
||||
}
|
||||
};
|
||||
|
||||
etk::Stream& operator <<(etk::Stream& _os, const FindProperty& _obj);
|
||||
|
||||
/**
|
||||
* @brief Node Elements for every-one
|
||||
* @not-in-doc
|
||||
|
@ -363,13 +363,7 @@ namespace etk {
|
||||
* @param[in] _pos Desired position read
|
||||
* @return Reference on the Element
|
||||
*/
|
||||
ETK_VECTOR_TYPE& get(size_t _pos) {
|
||||
// NOTE :Do not change log level, this generate error only in debug mode
|
||||
#if DEBUG_LEVEL > 2
|
||||
if(_pos>m_size){
|
||||
TK_CRITICAL("[CRITICAL] Access to an inexistent data in vector : " << _pos << "/ " << m_size);
|
||||
}
|
||||
#endif
|
||||
ETK_VECTOR_TYPE& get(const size_t _pos) {
|
||||
return m_data[_pos];
|
||||
}
|
||||
/**
|
||||
@ -377,21 +371,15 @@ namespace etk {
|
||||
* @param[in] _pos Position in the vector that might be get [0..Size()]
|
||||
* @return An reference on the copy of selected element
|
||||
*/
|
||||
ETK_VECTOR_TYPE& operator[] (size_t _pos) {
|
||||
return get(_pos);
|
||||
ETK_VECTOR_TYPE& operator[] (const size_t _pos) {
|
||||
return m_data[_pos];
|
||||
}
|
||||
/**
|
||||
* @brief Get an Element an a special position
|
||||
* @param[in] _pos Position in the vector that might be get [0..Size()]
|
||||
* @return An reference on the selected element
|
||||
*/
|
||||
const ETK_VECTOR_TYPE& operator[] (size_t _pos) const {
|
||||
// NOTE :Do not change log level, this generate error only in debug mode
|
||||
#if DEBUG_LEVEL > 2
|
||||
if(_pos>m_size){
|
||||
TK_CRITICAL("[CRITICAL] Access to an inexistent data in vector : " << _pos << "/ " << m_size);
|
||||
}
|
||||
#endif
|
||||
const ETK_VECTOR_TYPE& operator[] (const size_t _pos) const {
|
||||
return m_data[_pos];
|
||||
}
|
||||
/**
|
||||
|
@ -17,7 +17,7 @@ const etk::String& etk::Archive::getName(size_t _id) const {
|
||||
size_t id = 0;
|
||||
for (auto &it : m_content) {
|
||||
if (id == _id) {
|
||||
return it.first;
|
||||
return it.getKey();
|
||||
}
|
||||
++id;
|
||||
}
|
||||
@ -30,7 +30,7 @@ const etk::ArchiveContent& etk::Archive::getContent(size_t _id) const {
|
||||
size_t id = 0;
|
||||
for (auto &it : m_content) {
|
||||
if (id == _id) {
|
||||
return it.second;
|
||||
return it.getValue();
|
||||
}
|
||||
++id;
|
||||
}
|
||||
@ -43,7 +43,7 @@ const etk::ArchiveContent& etk::Archive::getContent(const etk::String& _key) con
|
||||
if (it == m_content.end()) {
|
||||
return g_error;
|
||||
}
|
||||
return it->second;
|
||||
return it->getValue();
|
||||
}
|
||||
|
||||
|
||||
@ -55,9 +55,9 @@ bool etk::Archive::exist(const etk::String& _key) const {
|
||||
void etk::Archive::display() {
|
||||
std::unique_lock<std::mutex> lock(m_mutex);
|
||||
for (auto &it : m_content) {
|
||||
int32_t size = it.second.getTheoricSize();
|
||||
int32_t sizeR = it.second.size();
|
||||
TK_INFO(" element : " << it.first << " size=" << size << " allocated=" << sizeR);
|
||||
int32_t size = it.getValue().getTheoricSize();
|
||||
int32_t sizeR = it.getValue().size();
|
||||
TK_INFO(" element : " << it.getKey() << " size=" << size << " allocated=" << sizeR);
|
||||
}
|
||||
}
|
||||
|
||||
@ -118,11 +118,11 @@ void etk::Archive::open(const etk::String& _key) {
|
||||
TK_ERROR("Try open an unexistant file : '" << _key << "'");
|
||||
return;
|
||||
}
|
||||
if (it->second.getNumberOfRef()==-1) {
|
||||
if (it->getValue().getNumberOfRef()==-1) {
|
||||
loadFile(it);
|
||||
it->second.increaseRef();
|
||||
it->getValue().increaseRef();
|
||||
}
|
||||
it->second.increaseRef();
|
||||
it->getValue().increaseRef();
|
||||
}
|
||||
|
||||
void etk::Archive::close(const etk::String& _key) {
|
||||
@ -132,10 +132,10 @@ void etk::Archive::close(const etk::String& _key) {
|
||||
TK_ERROR("Try close an unexistant file : '" << _key << "'");
|
||||
return;
|
||||
}
|
||||
if (it->second.getNumberOfRef()==0){
|
||||
if (it->getValue().getNumberOfRef()==0){
|
||||
TK_ERROR("Try close one more time the file : '" << _key << "'");
|
||||
} else {
|
||||
it->second.decreaseRef();
|
||||
it->getValue().decreaseRef();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -167,7 +167,7 @@ namespace etk {
|
||||
* @brief Request the load in memory of the concerned file.
|
||||
* @param[in] _it Iterator on the element.
|
||||
*/
|
||||
virtual void loadFile(const etk::Map<etk::String, ArchiveContent>::iterator& _it) { };
|
||||
virtual void loadFile(const etk::Map<etk::String, ArchiveContent>::Iterator& _it) { };
|
||||
public:
|
||||
/**
|
||||
* @brief Load an Achive with a specific name.
|
||||
|
@ -57,7 +57,7 @@ etk::archive::Zip::~Zip() {
|
||||
};
|
||||
}
|
||||
|
||||
void etk::archive::Zip::loadFile(const etk::Map<etk::String, ArchiveContent>::iterator& it) {
|
||||
void etk::archive::Zip::loadFile(const etk::Map<etk::String, ArchiveContent>::Iterator& it) {
|
||||
TK_VERBOSE("Real load file : '" << it->first << "'");
|
||||
|
||||
unzGoToFirstFile(m_ctx);
|
||||
|
@ -34,7 +34,7 @@
|
||||
*/
|
||||
virtual ~Zip();
|
||||
protected:
|
||||
void loadFile(const etk::Map<etk::String, ArchiveContent>::iterator& _it) override;
|
||||
void loadFile(const etk::Map<etk::String, ArchiveContent>::Iterator& _it) override;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -119,14 +119,6 @@ namespace etk {
|
||||
// forward _Arg as movable
|
||||
return ((typename etk::_Remove_reference<ETK_MOVE_TYPE>::m_type&&)_obj);
|
||||
}
|
||||
/*
|
||||
|
||||
template<class ETK_MOVE_TYPE>
|
||||
eETK_MOVE_TYPE&& move(ETK_MOVE_TYPE&& _obj) {
|
||||
// forward _Arg as movable
|
||||
return ((ETK_MOVE_TYPE&&)_obj);
|
||||
}
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
|
@ -54,6 +54,9 @@ def configure(target, my_module):
|
||||
# add dependency of the generic C++ library:
|
||||
my_module.add_depend([
|
||||
'c',
|
||||
'm',
|
||||
"pthread",
|
||||
"cxx",
|
||||
])
|
||||
|
||||
if "Android" in target.get_type():
|
||||
|
Loading…
x
Reference in New Issue
Block a user