# -*- mode: CMAKE; -*-
-project( replxx VERSION 0.0.2 LANGUAGES CXX C )
+project(replxx VERSION 0.0.2 LANGUAGES CXX C)
-# INFO
-set(REPLXX_DISPLAY_NAME "replxx")
-set(REPLXX_URL_INFO_ABOUT "https://github.com/AmokHuginnsson/replxx")
-set(REPLXX_CONTACT "amok@codestation.org")
-set(REPLXX_FRIENDLY_STRING "replxx - Read Evaluate Print Loop library")
+set(CMAKE_CXX_STANDARD 20)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
-# compiler options
-if(CMAKE_COMPILER_IS_GNUCXX)
- message(STATUS "Compiler type GNU: ${CMAKE_CXX_COMPILER}")
- set(BASE_COMPILER_OPTIONS "-std=c++11 -Wall -D_GNU_SOURCE -pthread")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${BASE_COMPILER_OPTIONS}")
- set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS} ${BASE_COMPILER_OPTIONS} -O0 --coverage -fno-inline -fno-default-inline -fno-inline-small-functions")
- set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${BASE_COMPILER_OPTIONS} -O0 -g -ggdb -g3 -ggdb3")
- set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} ${BASE_COMPILER_OPTIONS} -Os")
- set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${BASE_COMPILER_OPTIONS} -O3 -fomit-frame-pointer")
- set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${BASE_COMPILER_OPTIONS} -O3 -g")
- set(CMAKE_C_FLAGS "-std=c99")
-elseif(CMAKE_COMPILER_IS_CLANGCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
- # using regular Clang or AppleClang
- message(STATUS "Compiler type CLANG: ${CMAKE_CXX_COMPILER}")
- set(BASE_COMPILER_OPTIONS "-std=c++11 -Wall -Wextra -D_GNU_SOURCE -pthread")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${BASE_COMPILER_OPTIONS}")
- set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${BASE_COMPILER_OPTIONS} -O0 -g")
- set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} ${BASE_COMPILER_OPTIONS} -Os")
- set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${BASE_COMPILER_OPTIONS} -O3 -fomit-frame-pointer")
- set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${BASE_COMPILER_OPTIONS} -O3 -g")
- set(CMAKE_C_FLAGS "-std=c99")
-elseif(MSVC)
- message(STATUS "Compiler type MSVC: ${CMAKE_CXX_COMPILER}")
+if(MSVC)
add_definitions("-D_CRT_SECURE_NO_WARNINGS=1")
-
- set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /INCREMENTAL:NO /SUBSYSTEM:CONSOLE /LTCG /ignore:4099")
- set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} /SUBSYSTEM:CONSOLE /ignore:4099")
- set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /SUBSYSTEM:CONSOLE /ignore:4099")
- set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /SUBSYSTEM:CONSOLE /ignore:4099")
-else()
- # unknown compiler
- message(STATUS "Compiler type UNKNOWN: ${CMAKE_CXX_COMPILER}")
- set(BASE_COMPILER_OPTIONS "-std=c++11 -Wall -pthread")
- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${BASE_COMPILER_OPTIONS}")
- set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${BASE_COMPILER_OPTIONS} -O0 -g")
- set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} ${BASE_COMPILER_OPTIONS} -Os")
- set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${BASE_COMPILER_OPTIONS} -O3 -fomit-frame-pointer")
- set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${BASE_COMPILER_OPTIONS} -O3 -g")
- set(CMAKE_C_FLAGS "-std=c99")
endif()
-# build libreplxx
set(
REPLXX_SOURCES
src/conversion.cxx
PUBLIC ${PROJECT_SOURCE_DIR}/include
PRIVATE ${PROJECT_SOURCE_DIR}/src
)
-set( TARGETS ${TARGETS} rspamd-replxx )
+set(TARGETS ${TARGETS} rspamd-replxx)
target_compile_definitions(rspamd-replxx PRIVATE REPLXX_BUILDING_DLL)
target_link_libraries(rspamd-replxx "${RSPAMD_REQUIRED_LIBRARIES}")
-install( TARGETS ${TARGETS} LIBRARY DESTINATION ${RSPAMD_LIBDIR})
\ No newline at end of file
+install(TARGETS ${TARGETS} LIBRARY DESTINATION ${RSPAMD_LIBDIR})
#define REPLXX_HISTORY_HXX_INCLUDED 1
#include <list>
-#include <unordered_map>
+#include <map>
#include "unicodestring.hxx"
#include "utf8string.hxx"
#include "conversion.hxx"
#include "util.hxx"
-namespace std {
-template<>
-struct hash<replxx::UnicodeString> {
- std::size_t operator()( replxx::UnicodeString const& us_ ) const {
- std::size_t h( 0 );
- char32_t const* p( us_.get() );
- char32_t const* e( p + us_.length() );
- while ( p != e ) {
- h *= 31;
- h += *p;
- ++ p;
- }
- return ( h );
- }
-};
-}
-
namespace replxx {
class History {
}
};
typedef std::list<Entry> entries_t;
- typedef std::unordered_map<UnicodeString, entries_t::const_iterator> locations_t;
+ typedef std::map<UnicodeString, entries_t::const_iterator> locations_t;
+
private:
entries_t _entries;
locations_t _locations;