Skip to content

Commit

Permalink
hotplace rev.527 grooming
Browse files Browse the repository at this point in the history
  • Loading branch information
princeb612 committed May 14, 2024
1 parent 3c7eeae commit 604bf02
Show file tree
Hide file tree
Showing 47 changed files with 742 additions and 324 deletions.
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ cmake_minimum_required (VERSION 2.6)
project (hotplace)

#set (CMAKE_BUILD_TYPE Debug)
set (CMAKE_VERBOSE_MAKEFILE ON)
set (CMAKE_VERBOSE_MAKEFILE OFF)
set (CMAKE_INSTALL_PREFIX ${PROJECT_SOURCE_DIR})
set (CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
set (SUPPORT_STATIC 1) # always set 1
Expand Down
30 changes: 22 additions & 8 deletions sdk/base/basic/cmdline.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ class cmdarg_t {
public:
cmdarg_t(const std::string& token, const std::string& desc, std::function<void(T&, char*)> f);
cmdarg_t(const cmdarg_t& rhs);
cmdarg_t(cmdarg_t&& rhs);
~cmdarg_t();

/*
Expand Down Expand Up @@ -83,12 +84,10 @@ cmdarg_t<T>::cmdarg_t(const std::string& token, const std::string& desc, std::fu
}

template <typename T>
cmdarg_t<T>::cmdarg_t(const cmdarg_t& rhs) {
_token = rhs._token;
_desc = rhs._desc;
_func = rhs._func;
_flag = rhs._flag;
}
cmdarg_t<T>::cmdarg_t(const cmdarg_t& rhs) : _token(rhs._token), _desc(rhs._desc), _func(rhs._func), _flag(rhs._flag) {}

template <typename T>
cmdarg_t<T>::cmdarg_t(cmdarg_t&& rhs) : _token(std::move(rhs._token)), _desc(std::move(rhs._desc)), _func(std::move(rhs._func)), _flag(rhs._flag) {}

template <typename T>
cmdarg_t<T>::~cmdarg_t() {
Expand Down Expand Up @@ -168,6 +167,7 @@ class cmdline_t {
* @param cmdarg_t<T> cmd [in]
*/
cmdline_t& operator<<(const cmdarg_t<T>& cmd);
cmdline_t& operator<<(cmdarg_t<T>&& cmd);
/*
* @brief parse
* @param int argc [in]
Expand All @@ -177,7 +177,7 @@ class cmdline_t {
/*
* @brief return T
*/
T& value();
const T& value() const;
void help();

protected:
Expand Down Expand Up @@ -216,6 +216,20 @@ cmdline_t<T>& cmdline_t<T>::operator<<(const cmdarg_t<T>& cmd) {
return *this;
}

template <typename T>
cmdline_t<T>& cmdline_t<T>::operator<<(cmdarg_t<T>&& cmd) {
int idx = _args.size();

const char* token = cmd.token();
cmdline_args_map_pib_t pib = _args.insert(std::make_pair(token, cmd));

if (pib.second) {
_list.push_back(token);
}

return *this;
}

template <typename T>
return_t cmdline_t<T>::parse(int argc, char** argv) {
return_t ret = errorcode_t::success;
Expand Down Expand Up @@ -264,7 +278,7 @@ return_t cmdline_t<T>::parse(int argc, char** argv) {
}

template <typename T>
T& cmdline_t<T>::value() {
const T& cmdline_t<T>::value() const {
return _source;
}

Expand Down
47 changes: 24 additions & 23 deletions sdk/base/basic/keyvalue.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#ifndef __HOTPLACE_SDK_BASE_BASIC_KEYVALUE__
#define __HOTPLACE_SDK_BASE_BASIC_KEYVALUE__

#include <algorithm>
#include <deque>
#include <functional>
#include <map>
Expand All @@ -28,11 +29,11 @@ enum key_value_flag_t {
};

/**
* move clear and assign
* update drop older data
* key keep older data
* kv_move clear and assign
* kv_update drop older data
* kv_keep older data
*/
enum key_value_mode_t { move = 0, update, keep };
enum key_value_mode_t { kv_move = 0, kv_update, kv_keep };

/**
* @brief key-value configuation
Expand Down Expand Up @@ -69,17 +70,17 @@ class t_skey_value {
}

/**
* @brief add, update
* @brief add, kv_update
* @param const std::string& name [IN]
* @param const value_t& value [IN]
* @param uint32 mode [INOPT] see key_value_mode_t
* @return error code (see error.hpp)
* @remarks
* set (key1, value1, key_value_mode_t::keep); // return errorcode_t::success
* set (key1, value2, key_value_mode_t::keep); // return errorcode_t::already_exist
* set (key1, value2, key_value_mode_t::update); // update, return errorcode_t::success
* set (key1, value1, key_value_mode_t::kv_keep); // return errorcode_t::success
* set (key1, value2, key_value_mode_t::kv_keep); // return errorcode_t::already_exist
* set (key1, value2, key_value_mode_t::kv_update); // kv_update, return errorcode_t::success
*/
return_t set(const std::string& name, const value_t& value, int mode = key_value_mode_t::update) {
return_t set(const std::string& name, const value_t& value, int mode = key_value_mode_t::kv_update) {
return_t ret = errorcode_t::success;

__try2 {
Expand All @@ -92,7 +93,7 @@ class t_skey_value {

keyvalue_map_pib_t pib = _keyvalues.insert(std::make_pair(key, value));
if (false == pib.second) {
if (key_value_mode_t::update == mode) {
if (key_value_mode_t::kv_update == mode) {
pib.first->second = value;
} else {
ret = errorcode_t::already_exist;
Expand All @@ -109,14 +110,14 @@ class t_skey_value {
return ret;
}
/**
* @brief update
* @brief kv_update
* @param const std::string& name [in]
* @param const value_t& value [in]
* @return error code (see error.hpp)
* @remarks
* set(name, value, key_value_mode_t::update);
* set(name, value, key_value_mode_t::kv_update);
*/
return_t update(const std::string& name, const value_t& value) { return set(name, value, key_value_mode_t::update); }
return_t kv_update(const std::string& name, const value_t& value) { return set(name, value, key_value_mode_t::kv_update); }
/**
* @brief remove
* @param const std::string& name [IN]
Expand Down Expand Up @@ -169,7 +170,7 @@ class t_skey_value {
/**
* @brief exist
* @remarks
* kv.update ("key", "value");
* kv.kv_update ("key", "value");
* result = exist ("key"); // true
* result = exist ("value"); // false
*/
Expand Down Expand Up @@ -197,7 +198,7 @@ class t_skey_value {
* @brief return value by key
* @param const std::string& name
* @remarks
* kv.update ("key", "value");
* kv.kv_update ("key", "value");
* value = kv ["key"]; // "value"
* value = kv ["value"]; // nullptr
*/
Expand Down Expand Up @@ -227,7 +228,7 @@ class t_skey_value {
* @param value_t& value [OUT]
* @return error code (see error.hpp)
* @remarks
* kv.update ("key", "value");
* kv.kv_update ("key", "value");
* kv.query ("key", value); // "value"
* kv.query ("value", value); // ""
*/
Expand Down Expand Up @@ -268,11 +269,11 @@ class t_skey_value {
* kv1 [ ("key1", "value1"), ("key2", "value2") ]
* kv2 [ ("key2", "item2"), ("key3", "item3") ]
*
* result of kv1.copy (kv2, key_value_mode_t::move) is kv1 [ ("key2", "item2"), ("key3", "item3") ]
* result of kv1.copy (kv2, key_value_mode_t::update) is kv1 [ ("key1", "value1"), ("key2", "item2"), ("key3", "item3") ]
* result of kv1.copy (kv2, key_value_mode_t::keep) is kv1 [ ("key1", "value1"), ("key2", "value2"), ("key3", "item3") ]
* result of kv1.copy (kv2, key_value_mode_t::kv_move) is kv1 [ ("key2", "item2"), ("key3", "item3") ]
* result of kv1.copy (kv2, key_value_mode_t::kv_update) is kv1 [ ("key1", "value1"), ("key2", "item2"), ("key3", "item3") ]
* result of kv1.copy (kv2, key_value_mode_t::kv_keep) is kv1 [ ("key1", "value1"), ("key2", "value2"), ("key3", "item3") ]
*/
return_t copy(t_skey_value<value_t>& rhs, int mode = key_value_mode_t::update) {
return_t copy(t_skey_value<value_t>& rhs, int mode = key_value_mode_t::kv_update) {
return_t ret = errorcode_t::success;

critical_section_guard guard(rhs._lock);
Expand All @@ -292,7 +293,7 @@ class t_skey_value {

critical_section_guard guard(_lock);

if (key_value_mode_t::move == mode) {
if (key_value_mode_t::kv_move == mode) {
clear();
}

Expand Down Expand Up @@ -328,10 +329,10 @@ class t_skey_value {
* @brief operator <<
* @param t_skey_value& rhs [in]
* @return t_skey_value&
* @remarks copy with key_value_mode_t::update
* @remarks copy with key_value_mode_t::kv_update
*/
t_skey_value<value_t>& operator<<(t_skey_value<value_t>& rhs) {
copy(rhs, key_value_mode_t::update);
copy(rhs, key_value_mode_t::kv_update);
return *this;
}

Expand Down
57 changes: 57 additions & 0 deletions sdk/base/basic/nostd/container.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/* vim: set tabstop=4 shiftwidth=4 softtabstop=4 expandtab smarttab : */
/**
* @file {file}
* @author Soo Han, Kim (princeb612.kr@gmail.com)
* @desc
*
* Revision History
* Date Name Description
*
*/

#ifndef __HOTPLACE_SDK_BASE_BASIC_NOSTD_CONTAINER__
#define __HOTPLACE_SDK_BASE_BASIC_NOSTD_CONTAINER__

#include <deque>
#include <functional>
#include <map>
#include <sdk/base/error.hpp>
#include <sdk/base/stl.hpp>
#include <sdk/base/stream/basic_stream.hpp>
#include <sdk/base/syntax.hpp>
#include <sdk/base/types.hpp>

namespace hotplace {

template <typename container_t>
void for_each(const container_t& c, typename std::function<void(typename container_t::const_iterator, int)> f) {
if (c.size()) {
auto iter = c.begin();
f(iter++, 0);
while (c.end() != iter) {
f(iter++, 1);
}
f(c.end(), 2);
}
}

template <typename container_t, typename stream_type>
void print(const container_t& c, stream_type& s) {
for_each<container_t>(c, [&](typename container_t::const_iterator iter, int where) -> void {
switch (where) {
case 0:
s << "[" << *iter;
break;
case 1:
s << ", " << *iter;
break;
case 2:
s << "]";
break;
}
});
}

} // namespace hotplace

#endif
121 changes: 121 additions & 0 deletions sdk/base/basic/nostd/vector.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
/* vim: set tabstop=4 shiftwidth=4 softtabstop=4 expandtab smarttab : */
/**
* @file {file}
* @author Soo Han, Kim (princeb612.kr@gmail.com)
* @desc
*
* Revision History
* Date Name Description
*
*/

#ifndef __HOTPLACE_SDK_BASE_BASIC_NOSTD_VECTOR__
#define __HOTPLACE_SDK_BASE_BASIC_NOSTD_VECTOR__

#include <sdk/base/stl.hpp>
#include <sdk/base/syntax.hpp>
#include <sdk/base/types.hpp>

namespace hotplace {

/**
* @brief vector
* @refer Data Structures and Algorithm Analysis in C++ - 3 Lists, Stacks, and Queues
*/
template <typename T>
class t_vector {
public:
explicit t_vector(size_t size = 0) : _size(size), _capacity(size + const_vector_spare) { _items = new T[_capacity]; }
t_vector(const t_vector& rhs) : _size(rhs._size), _capacity(rhs._capacity), _items(nullptr) {
_items = new T[_capacity];
for (size_t i = 0; i < _size; i++) {
_items[i] = rhs._items[i];
}
}
t_vector(t_vector&& rhs) : _size(rhs._size), _capacity(rhs._capacity), _items(rhs._items) {
rhs._items = nullptr;
rhs.clear();
}
~t_vector() { clear(); }

t_vector& operator=(const t_vector& rhs) {
t_vector o = rhs;
std::swap(*this, o);
return *this;
}
t_vector& operator=(t_vector&& rhs) {
clear();
_size = rhs._size;
_capacity = rhs._capacity;
_items = rhs._items;
rhs._items = nullptr;
rhs._size = 0;
rhs._capacity = 0;
return *this;
}
void resize(size_t size) {
if (size > _capacity) {
reserve(size << 1);
}
_size = size;
}
void reserve(size_t capacity) {
if (capacity >= _size) {
T* items = new T[capacity];
for (size_t i = 0; i < _size; ++i) {
items[i] = std::move(_items[i]);
}
_capacity = capacity;
std::swap(items, _items);
delete[] items;
}
}
T& operator[](size_t index) { return _items[index]; }
const T& operator[](size_t index) const { return _items[index]; }
bool empty() const { return 0 == size(); }
size_t size() const { return _size; }
int capacity() const { return _capacity; }

void push_back(const T& x) {
if (_size == _capacity) {
reserve((_capacity << 1) + 1);
}
_items[_size++] = x;
}
void push_back(T&& x) {
if (_size == _capacity) {
reserve((_capacity << 1) + 1);
}
_items[_size++] = std::move(x);
}
void pop_back() { --_size; }
const T& back() const { return _items[_size - 1]; }

void clear() {
if (_items) {
delete[] _items;
_items = nullptr;
}
_size = 0;
_capacity = 0;
}

typedef T* iterator;
typedef const T* const_iterator;

T* begin() { return &_items[0]; }
T* end() { return &_items[size()]; }
const T* begin() const { return &_items[0]; }
const T* end() const { return &_items[size()]; }

private:
size_t _size;
size_t _capacity;
T* _items;

static const size_t const_vector_spare = 16;
};

} // namespace hotplace

#endif
Loading

0 comments on commit 604bf02

Please sign in to comment.