/* Copyright: © 2018 SIL International. Description: Internal option key value map class and adaptor class for the API. Create Date: 2 Oct 2018 Authors: Tim Eves (TSE) History: 2 Oct 2018 - TSE - Refactored out of km_kbp_options_api.cpp. 7 Nov 2018 - TSE - Refactored into option.hpp & option.cpp. */ #pragma once #include #include #include // Forward declarations class json; namespace km { namespace kbp { struct option : public km_kbp_option_item { option(): km_kbp_option_item KM_KBP_OPTIONS_END {} option(option const &); option(option &&); option(km_kbp_option_scope, std::u16string const &, std::u16string const &); ~option() noexcept; option & operator=(option && rhs); }; inline option::option(option const & rhs) : option(km_kbp_option_scope(rhs.scope), rhs.key, rhs.value) {} inline option::option(option && rhs) : km_kbp_option_item { rhs.key, rhs.value, rhs.scope } { rhs.key = nullptr; rhs.value = nullptr; } inline option::~option() noexcept { delete [] key; delete [] value; } inline option & option::operator=(option && rhs) { delete [] key; delete [] value; key = rhs.key; value = rhs.value; rhs.key = nullptr; scope = rhs.scope; rhs.value = nullptr; return *this; } class options { //km_kbp_keyboard_attrs const &_kb; km_kbp_option_item const * _scopes[KM_KBP_OPT_MAX_SCOPES-1]; std::vector