├── cmake
├── version.cmake
├── third_party_paths.cmake
├── install.cmake
├── options.cmake
└── settings.cmake
├── CMakeLists.txt
├── examples
├── http
│ ├── config
│ │ ├── config.json
│ │ └── config.xml
│ ├── common
│ │ └── include
│ │ │ └── common
│ │ │ ├── id
│ │ │ └── service.h
│ │ │ ├── interface
│ │ │ └── iadmin.h
│ │ │ ├── ps
│ │ │ └── iadmin.h
│ │ │ └── client.h
│ ├── CMakeLists.txt
│ ├── client
│ │ └── src
│ │ │ └── main.cpp
│ └── server
│ │ └── src
│ │ └── main.cpp
├── visitor
│ ├── config
│ │ ├── config.json
│ │ └── config.xml
│ ├── common
│ │ └── include
│ │ │ └── common
│ │ │ ├── id
│ │ │ └── service.h
│ │ │ ├── ps
│ │ │ └── iface.h
│ │ │ └── interface
│ │ │ └── iface.h
│ ├── server
│ │ └── src
│ │ │ ├── main.cpp
│ │ │ └── service.cpp
│ ├── CMakeLists.txt
│ └── client
│ │ └── src
│ │ └── main.cpp
├── complex_type
│ ├── config
│ │ ├── config.json
│ │ └── config.xml
│ ├── common
│ │ └── include
│ │ │ └── common
│ │ │ ├── id
│ │ │ └── service.h
│ │ │ ├── interface
│ │ │ └── imy_company.h
│ │ │ ├── ps
│ │ │ └── imy_company.h
│ │ │ ├── data
│ │ │ └── data.h
│ │ │ └── meta
│ │ │ └── data.h
│ ├── server
│ │ └── src
│ │ │ └── main.cpp
│ └── CMakeLists.txt
├── hello_world
│ ├── config
│ │ ├── config.json
│ │ └── config.xml
│ ├── common
│ │ └── include
│ │ │ └── common
│ │ │ ├── id
│ │ │ └── service.h
│ │ │ ├── interface
│ │ │ └── ihello_world.h
│ │ │ └── ps
│ │ │ └── ihello_world.h
│ ├── server
│ │ └── src
│ │ │ └── main.cpp
│ ├── CMakeLists.txt
│ └── client
│ │ └── src
│ │ └── main.cpp
├── inheritance
│ ├── config
│ │ ├── config.json
│ │ └── config.xml
│ ├── common
│ │ └── include
│ │ │ └── common
│ │ │ ├── id
│ │ │ └── service.h
│ │ │ ├── interface
│ │ │ └── iface.h
│ │ │ └── ps
│ │ │ └── iface.h
│ ├── server
│ │ └── src
│ │ │ └── main.cpp
│ ├── CMakeLists.txt
│ └── client
│ │ └── src
│ │ └── main.cpp
├── http_crud
│ ├── db
│ │ └── schema.sql
│ ├── config
│ │ ├── config.json
│ │ └── config.xml
│ ├── CMakeLists.txt
│ └── src
│ │ ├── main.cpp
│ │ ├── employee_service.h
│ │ └── data
│ │ └── data.h
├── microservices
│ ├── storage
│ │ ├── db
│ │ │ └── schema.sql
│ │ └── src
│ │ │ └── main.cpp
│ ├── config
│ │ ├── service.json
│ │ ├── storage.json
│ │ ├── service.xml
│ │ └── storage.xml
│ ├── service
│ │ └── src
│ │ │ ├── id
│ │ │ └── service.h
│ │ │ ├── main.cpp
│ │ │ └── data
│ │ │ └── responses.h
│ ├── common
│ │ └── include
│ │ │ └── common
│ │ │ ├── id
│ │ │ └── service.h
│ │ │ ├── data
│ │ │ ├── data.h
│ │ │ └── meta
│ │ │ │ └── data.h
│ │ │ └── interface
│ │ │ ├── ps
│ │ │ └── iemployee_storage.h
│ │ │ └── iemployee_storage.h
│ └── CMakeLists.txt
├── reflection
│ └── CMakeLists.txt
├── http_echo_server
│ ├── CMakeLists.txt
│ ├── config
│ │ ├── config.json
│ │ └── config.xml
│ └── src
│ │ └── main.cpp
└── common
│ └── cmake
│ ├── settings.cmake
│ └── mif.cmake
├── src
└── mif
│ ├── common
│ ├── config.h.in
│ ├── version.h.in
│ └── uuid_generator.cpp
│ ├── remote
│ └── factory.cpp
│ ├── service
│ └── external.cpp
│ ├── net
│ ├── clients
│ │ ├── frame_writer.cpp
│ │ ├── gzip_compressor.cpp
│ │ └── gzip_decompressor.cpp
│ ├── tcp
│ │ └── detail
│ │ │ └── session.h
│ └── http
│ │ └── detail
│ │ └── utility.h
│ ├── db
│ └── postgresql
│ │ └── detail
│ │ └── statement.h
│ └── application
│ └── tcp_service.cpp
├── download_third_party.sh
├── include
└── mif
│ ├── common
│ ├── unused.h
│ ├── types.h
│ ├── hash_calc.h
│ ├── log_init.h
│ ├── uuid_generator.h
│ ├── icollection.h
│ ├── thread_pool.h
│ ├── detail
│ │ ├── hierarchy.h
│ │ ├── type_logic_funcs.h
│ │ └── method.h
│ ├── index_sequence.h
│ └── log.h
│ ├── net
│ ├── icontrol.h
│ ├── ipublisher.h
│ ├── ihandler.h
│ ├── http
│ │ ├── servlet.h
│ │ ├── detail
│ │ │ ├── content_tags.h
│ │ │ ├── params.h
│ │ │ └── content.h
│ │ ├── codes.h
│ │ ├── iweb_service.h
│ │ ├── request_handler.h
│ │ ├── methods.h
│ │ ├── clients.h
│ │ ├── ioutput_pack.h
│ │ ├── serializer
│ │ │ ├── json.h
│ │ │ ├── plain_text.h
│ │ │ └── xml.h
│ │ ├── converter
│ │ │ └── content
│ │ │ │ ├── json.h
│ │ │ │ ├── plain_text.h
│ │ │ │ ├── raw.h
│ │ │ │ └── xml.h
│ │ ├── iinput_pack.h
│ │ ├── server.h
│ │ └── make_web_service.h
│ ├── iconnection.h
│ ├── tcp
│ │ ├── server.h
│ │ ├── clients.h
│ │ └── connection.h
│ ├── iclient_factory.h
│ ├── clients
│ │ ├── frame_writer.h
│ │ ├── gzip_compressor.h
│ │ ├── gzip_decompressor.h
│ │ ├── frame_reader.h
│ │ └── parallel_handler.h
│ └── client.h
│ ├── service
│ ├── icheckable.h
│ ├── id
│ │ └── service.h
│ ├── ipool.h
│ ├── make.h
│ ├── ifactory.h
│ ├── create.h
│ ├── external.h
│ ├── ilocator.h
│ └── root_locator.h
│ ├── db
│ ├── iconnection_pool.h
│ ├── istatement.h
│ ├── iconnection.h
│ ├── id
│ │ └── service.h
│ ├── irecordset.h
│ └── transaction.h
│ ├── remote
│ ├── meta
│ │ ├── iservice.h
│ │ └── service
│ │ │ └── icheckable.h
│ ├── serialization
│ │ ├── serialization.h
│ │ └── detail
│ │ │ └── tag.h
│ ├── predefined
│ │ ├── serialization
│ │ │ ├── xml.h
│ │ │ ├── json.h
│ │ │ └── boost
│ │ │ │ ├── xml.h
│ │ │ │ ├── text.h
│ │ │ │ └── binary.h
│ │ └── protocol
│ │ │ ├── simple_frame.h
│ │ │ └── archived_frame.h
│ ├── factory.h
│ └── detail
│ │ ├── meta
│ │ └── iobject_manager.h
│ │ └── iobject_manager.h
│ └── application
│ ├── id
│ └── config.h
│ ├── iconfig.h
│ ├── net_base_application.h
│ ├── http_server.h
│ ├── tcp_service.h
│ └── tcp_service_client.h
├── template
└── src
│ └── main.cpp
└── LICENSE
/cmake/version.cmake:
--------------------------------------------------------------------------------
1 | set (MIF_VERSION_MAJOR 1)
2 | set (MIF_VERSION_MINOR 5)
3 | set (MIF_VERSION_PATCH 1)
4 |
--------------------------------------------------------------------------------
/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.27)
2 |
3 | project(Mif)
4 |
5 | include (cmake/settings.cmake)
6 | include (cmake/third_party.cmake)
7 | include (cmake/library.cmake)
8 | include (cmake/install.cmake)
9 |
--------------------------------------------------------------------------------
/cmake/third_party_paths.cmake:
--------------------------------------------------------------------------------
1 | # zlib
2 | set (MIF_ZLIB_LOCAL_PATH "${THITD_PARTY_SOURCES_PATH}/zlib/")
3 |
4 | # boost
5 | set (MIF_BOOST_LOCAL_PATH "${THITD_PARTY_SOURCES_PATH}/boost/")
6 |
7 | # libpq
8 | set (MIF_LIBPQ_LOCAL_PATH "${THITD_PARTY_SOURCES_PATH}/libpq/")
9 |
--------------------------------------------------------------------------------
/cmake/install.cmake:
--------------------------------------------------------------------------------
1 | if (MIF_STATIC_LIBS)
2 | install (TARGETS ${PROJECT_LC} EXPORT ${PROJECT_LC}
3 | ARCHIVE DESTINATION lib
4 | )
5 | endif()
6 |
7 | if (MIF_SHARED_LIBS)
8 | install (TARGETS ${PROJECT_LC}${MIF_SHARED_LIB_SUFFIX} EXPORT ${PROJECT_LC}${MIF_SHARED_LIB_SUFFIX}
9 | LIBRARY DESTINATION lib
10 | )
11 | endif()
12 |
13 | install(DIRECTORY include/${PROJECT_LC} DESTINATION include)
14 |
--------------------------------------------------------------------------------
/examples/http/config/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "common": {
3 | "daemon": 0,
4 | "log": {
5 | "level": 4,
6 | "dir": ".",
7 | "pattern": "log_%5N.log"
8 | }
9 | },
10 | "data":
11 | {
12 | "server": {
13 | "host": "0.0.0.0",
14 | "port": "55555",
15 | "workers": 8,
16 | "timeout": 10000000
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/examples/visitor/config/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "common": {
3 | "daemon": 0,
4 | "log": {
5 | "level": 4,
6 | "dir": ".",
7 | "pattern": "log_%5N.log"
8 | }
9 | },
10 | "data":
11 | {
12 | "server": {
13 | "host": "0.0.0.0",
14 | "port": "55555",
15 | "workers": 8,
16 | "timeout": 10000000
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/examples/complex_type/config/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "common": {
3 | "daemon": 0,
4 | "log": {
5 | "level": 4,
6 | "dir": ".",
7 | "pattern": "log_%5N.log"
8 | }
9 | },
10 | "data":
11 | {
12 | "server": {
13 | "host": "0.0.0.0",
14 | "port": "55555",
15 | "workers": 8,
16 | "timeout": 10000000
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/examples/hello_world/config/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "common": {
3 | "daemon": 0,
4 | "log": {
5 | "level": 4,
6 | "dir": ".",
7 | "pattern": "log_%5N.log"
8 | }
9 | },
10 | "data":
11 | {
12 | "server": {
13 | "host": "0.0.0.0",
14 | "port": "55555",
15 | "workers": 8,
16 | "timeout": 10000000
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/examples/inheritance/config/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "common": {
3 | "daemon": 0,
4 | "log": {
5 | "level": 4,
6 | "dir": ".",
7 | "pattern": "log_%5N.log"
8 | }
9 | },
10 | "data":
11 | {
12 | "server": {
13 | "host": "0.0.0.0",
14 | "port": "55555",
15 | "workers": 8,
16 | "timeout": 10000000
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/mif/common/config.h.in:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 10.2017
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MIF_COMMON_CONFIG_H__
9 | #define __MIF_COMMON_CONFIG_H__
10 |
11 | ${MIF_COMPILER_DEFINES}
12 |
13 | #endif // !__MIF_COMMON_CONFIG_H__
14 |
--------------------------------------------------------------------------------
/cmake/options.cmake:
--------------------------------------------------------------------------------
1 | # Third-party projects options
2 | option (MIF_NEED_THIRD_PARTY_BUILD "[MIF] Need to build third-party libraries" ON)
3 | option (MIF_WITH_POSTGRESQL "[MIF] Support working with PostgreSQL library (libpq)" ON)
4 |
5 | # MIF library options
6 | option (MIF_STATIC_LIBS "[MIF] Create static libs" ON)
7 | option (MIF_SHARED_LIBS "[MIF] Create shared libs" OFF)
8 |
9 | # Json writer option
10 | option (MIF_PRETTY_JSON_WRITER "[MIF] Write pretty json" ON)
11 |
--------------------------------------------------------------------------------
/examples/http_crud/db/schema.sql:
--------------------------------------------------------------------------------
1 | BEGIN;
2 |
3 | CREATE TYPE "Position" AS ENUM
4 | (
5 | 'Unknown',
6 | 'Developer',
7 | 'Manager'
8 | );
9 |
10 | CREATE TABLE employees
11 | (
12 | employee_id bigserial not null primary key,
13 | name varchar not null,
14 | last_name varchar not null,
15 | age integer not null,
16 | email varchar not null,
17 | position "Position" not null default 'Unknown',
18 | rate numeric(10, 2) not null
19 | );
20 |
21 | COMMIT;
22 |
--------------------------------------------------------------------------------
/examples/microservices/storage/db/schema.sql:
--------------------------------------------------------------------------------
1 | BEGIN;
2 |
3 | CREATE TYPE "Position" AS ENUM
4 | (
5 | 'Unknown',
6 | 'Developer',
7 | 'Manager'
8 | );
9 |
10 | CREATE TABLE employees
11 | (
12 | employee_id bigserial not null primary key,
13 | name varchar not null,
14 | last_name varchar not null,
15 | age integer not null,
16 | email varchar not null,
17 | position "Position" not null default 'Unknown',
18 | rate numeric(10, 2) not null
19 | );
20 |
21 | COMMIT;
22 |
--------------------------------------------------------------------------------
/examples/http/config/config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 0
5 |
6 | 4
7 | .
8 | log_%5N.log
9 |
10 |
11 |
12 |
13 | 0.0.0.0
14 | 55555
15 | 8
16 | 10000000
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/examples/hello_world/config/config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 0
5 |
6 | 4
7 | .
8 | log_%5N.log
9 |
10 |
11 |
12 |
13 | 0.0.0.0
14 | 55555
15 | 8
16 | 10000000
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/examples/http_crud/config/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "common": {
3 | "daemon": 0,
4 | "log": {
5 | "level": 4,
6 | "dir": "../build/",
7 | "pattern": "log_%5N.log"
8 | }
9 | },
10 | "data":
11 | {
12 | "server":
13 | {
14 | "host": "0.0.0.0",
15 | "port": "55555",
16 | "workers": 8,
17 | "timeout": 10000000
18 | },
19 | "database":
20 | {
21 | "host": "localhost",
22 | "port": 5432,
23 | "user": "postgres",
24 | "password": "postgres",
25 | "dbname": "crud_test",
26 | "connectiontimeout": 10
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/examples/inheritance/config/config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 0
5 |
6 | 4
7 | .
8 | log_%5N.log
9 |
10 |
11 |
12 |
13 | 0.0.0.0
14 | 55555
15 | 8
16 | 10000000
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/examples/reflection/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.27)
2 |
3 | project(Reflection)
4 | set(PROJECT ${PROJECT_NAME})
5 | string(TOLOWER "${PROJECT}" PROJECT_LC)
6 |
7 | include (../common/cmake/mif.cmake)
8 |
9 | set(COMMON_HEADERS
10 | ${COMMON_HEADERS}
11 | )
12 |
13 | set(HEADERS
14 | ${HEADERS}
15 | ${COMMON_HEADERS}
16 | )
17 |
18 | set(SOURCES
19 | ${SOURCES}
20 | )
21 |
22 | add_executable(${PROJECT_LC} ${HEADERS} ${SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp)
23 | target_link_libraries(${PROJECT_LC} ${LIBRARIES})
24 |
--------------------------------------------------------------------------------
/examples/visitor/config/config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 0
5 |
6 | 4
7 | .
8 | log_%5N.log
9 |
10 |
11 |
12 |
13 | 0.0.0.0
14 | 55555
15 | 8
16 | 10000000
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/examples/complex_type/config/config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 0
5 |
6 | 4
7 | .
8 | log_%5N.log
9 |
10 |
11 |
12 |
13 | 0.0.0.0
14 | 55555
15 | 8
16 | 10000000
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/examples/http_echo_server/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.27)
2 |
3 | project(http_echo_server)
4 | set(PROJECT ${PROJECT_NAME})
5 | string(TOLOWER "${PROJECT}" PROJECT_LC)
6 |
7 | include (../common/cmake/mif.cmake)
8 |
9 | set(COMMON_HEADERS
10 | ${COMMON_HEADERS}
11 | )
12 |
13 | set(HEADERS
14 | ${HEADERS}
15 | ${COMMON_HEADERS}
16 | )
17 |
18 | set(SOURCES
19 | ${SOURCES}
20 | )
21 |
22 | add_executable(${PROJECT_LC} ${HEADERS} ${SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp)
23 | target_link_libraries(${PROJECT_LC} ${LIBRARIES})
24 |
--------------------------------------------------------------------------------
/download_third_party.sh:
--------------------------------------------------------------------------------
1 | mkdir third_party_sources ||:
2 | cd third_party_sources
3 | git clone --branch v1.3 https://github.com/madler/zlib.git
4 |
5 | wget https://boostorg.jfrog.io/artifactory/main/release/1.85.0/source/boost_1_85_0.tar.gz
6 | tar zxvf boost_1_85_0.tar.gz
7 | mv boost_1_85_0 boost
8 | rm boost_1_85_0.tar.gz
9 |
10 | # In Ubuntu you might have to install some additional packages
11 | # - liblz4-dev
12 | # - pkgconf
13 | # - bison
14 | # - flex
15 |
16 | wget https://github.com/postgres/postgres/archive/REL_16_1.tar.gz
17 | tar zxvf REL_16_1.tar.gz
18 | mv postgres-REL_16_1 libpq
19 | rm REL_16_1.tar.gz
20 |
--------------------------------------------------------------------------------
/examples/microservices/config/service.json:
--------------------------------------------------------------------------------
1 | {
2 | "common": {
3 | "daemon": 0,
4 | "log": {
5 | "level": 4,
6 | "dir": ".",
7 | "pattern": "log_%5N.log"
8 | }
9 | },
10 | "data":
11 | {
12 | "server": {
13 | "host": "0.0.0.0",
14 | "port": "55555",
15 | "workers": 8,
16 | "timeout": 10000000
17 | },
18 | "storage": {
19 | "host": "localhost",
20 | "port": "55000",
21 | "workers": 8,
22 | "timeout": 10000000
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/examples/http_echo_server/config/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "common": {
3 | "daemon": 0,
4 | "log": {
5 | "level": 4,
6 | "dir": ".",
7 | "pattern": "log_%5N.log"
8 | }
9 | },
10 | "data":
11 | {
12 | "server": {
13 | "host": "0.0.0.0",
14 | "port": "55555",
15 | "workers": 8,
16 | "timeout": 10000000,
17 | "http": {
18 | "headerslimit": 512,
19 | "bodylimit": 1024,
20 | "chunksize": 1024,
21 | "pipelinelimit": 4
22 | }
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/include/mif/common/unused.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 11.2016
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MIF_COMMON_UNUSED_H__
9 | #define __MIF_COMMON_UNUSED_H__
10 |
11 | namespace Mif
12 | {
13 | namespace Common
14 | {
15 |
16 | template
17 | inline void Unused(T && ... )
18 | {
19 | }
20 |
21 | } // namespace Common
22 | } // namespace Mif
23 |
24 | #endif // !__MIF_COMMON_UNUSED_H__
25 |
--------------------------------------------------------------------------------
/include/mif/net/icontrol.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 09.2016
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MIF_NET_ICONTROL_H__
9 | #define __MIF_NET_ICONTROL_H__
10 |
11 | namespace Mif
12 | {
13 | namespace Net
14 | {
15 |
16 | struct IControl
17 | {
18 | virtual ~IControl() = default;
19 | virtual void CloseMe() = 0;
20 | };
21 |
22 | } // namespace Net
23 | } // namespace Mif
24 |
25 | #endif // !__MIF_NET_ICONTROL_H__
26 |
--------------------------------------------------------------------------------
/include/mif/common/types.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 09.2016
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MIF_COMMON_TYPES_H__
9 | #define __MIF_COMMON_TYPES_H__
10 |
11 | // STD
12 | #include
13 | #include
14 |
15 | namespace Mif
16 | {
17 | namespace Common
18 | {
19 |
20 | using Buffer = std::vector;
21 | using BufferPtr = std::shared_ptr;
22 |
23 | } // namespace Common
24 | } // namespace Mif
25 |
26 | #endif // !__MIF_COMMON_TYPES_H__
27 |
--------------------------------------------------------------------------------
/examples/microservices/config/storage.json:
--------------------------------------------------------------------------------
1 | {
2 | "common": {
3 | "daemon": 0,
4 | "log": {
5 | "level": 4,
6 | "dir": ".",
7 | "pattern": "log_%5N.log"
8 | }
9 | },
10 | "data":
11 | {
12 | "server": {
13 | "host": "0.0.0.0",
14 | "port": "55000",
15 | "workers": 8,
16 | "timeout": 10000000
17 | },
18 | "database":
19 | {
20 | "host": "localhost",
21 | "port": 5432,
22 | "user": "postgres",
23 | "password": "postgres",
24 | "dbname": "crud_test",
25 | "connectiontimeout": 10
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/examples/http_crud/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.27)
2 |
3 | project(http_crud)
4 | set(PROJECT ${PROJECT_NAME})
5 | string(TOLOWER "${PROJECT}" PROJECT_LC)
6 |
7 | include (../common/cmake/mif.cmake)
8 |
9 | include_directories(${CMAKE_SOURCE_DIR}/../common/include)
10 |
11 | set(COMMON_HEADERS
12 | ${COMMON_HEADERS}
13 | )
14 |
15 | set(HEADERS
16 | ${HEADERS}
17 | ${COMMON_HEADERS}
18 | )
19 |
20 | include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
21 |
22 | set(SOURCES
23 | ${SOURCES}
24 | ${CMAKE_CURRENT_SOURCE_DIR}/src/employee_service.cpp
25 | )
26 |
27 | add_executable(${PROJECT_LC} ${HEADERS} ${SOURCES} ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp)
28 | target_link_libraries(${PROJECT_LC} ${LIBRARIES})
29 |
--------------------------------------------------------------------------------
/examples/http/common/include/common/id/service.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 03.2017
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __HTTP_COMMON_ID_SERVICE_H__
9 | #define __HTTP_COMMON_ID_SERVICE_H__
10 |
11 | // MIF
12 | #include
13 |
14 | namespace Service
15 | {
16 | namespace Id
17 | {
18 |
19 | enum
20 | {
21 | Service = Mif::Common::Crc32("WebService.Admin")
22 | };
23 |
24 | } // namespace Id
25 | } // namespace Service
26 |
27 | #endif // !__HTTP_COMMON_ID_SERVICE_H__
28 |
--------------------------------------------------------------------------------
/examples/visitor/common/include/common/id/service.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 02.2017
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __VISITOR_COMMON_ID_SERVICE_H__
9 | #define __VISITOR_COMMON_ID_SERVICE_H__
10 |
11 | // MIF
12 | #include
13 |
14 | namespace Service
15 | {
16 | namespace Id
17 | {
18 |
19 | enum
20 | {
21 | Service = Mif::Common::Crc32("Service")
22 | };
23 |
24 | } // namespace Id
25 | } // namespace Service
26 |
27 | #endif // !__VISITOR_COMMON_ID_SERVICE_H__
28 |
--------------------------------------------------------------------------------
/examples/microservices/config/service.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 0
5 |
6 | 4
7 | .
8 | log_%5N.log
9 |
10 |
11 |
12 |
13 | 0.0.0.0
14 | 55555
15 | 8
16 | 10000000
17 |
18 |
19 | localhost
20 | 55000
21 | 8
22 | 10000000
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/examples/inheritance/common/include/common/id/service.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 01.2017
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __INHERITANCE_COMMON_ID_SERVICE_H__
9 | #define __INHERITANCE_COMMON_ID_SERVICE_H__
10 |
11 | // MIF
12 | #include
13 |
14 | namespace Service
15 | {
16 | namespace Id
17 | {
18 |
19 | enum
20 | {
21 | Service = Mif::Common::Crc32("Service")
22 | };
23 |
24 | } // namespace Id
25 | } // namespace Service
26 |
27 | #endif // !__INHERITANCE_COMMON_ID_SERVICE_H__
28 |
--------------------------------------------------------------------------------
/examples/complex_type/common/include/common/id/service.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 01.2017
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __COMPLEX_TYPE_COMMON_ID_SERVICE_H__
9 | #define __COMPLEX_TYPE_COMMON_ID_SERVICE_H__
10 |
11 | // MIF
12 | #include
13 |
14 | namespace Service
15 | {
16 | namespace Id
17 | {
18 |
19 | enum
20 | {
21 | MyCompany = Mif::Common::Crc32("MyCompany")
22 | };
23 |
24 | } // namespace Id
25 | } // namespace Service
26 |
27 | #endif // !__COMPLEX_TYPE_COMMON_ID_SERVICE_H__
28 |
--------------------------------------------------------------------------------
/examples/hello_world/common/include/common/id/service.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 01.2017
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __HELLO_WORLD_COMMON_ID_SERVICE_H__
9 | #define __HELLO_WORLD_COMMON_ID_SERVICE_H__
10 |
11 | // MIF
12 | #include
13 |
14 | namespace Service
15 | {
16 | namespace Id
17 | {
18 |
19 | enum
20 | {
21 | HelloWorld = Mif::Common::Crc32("HelloWorld")
22 | };
23 |
24 | } // namespace Id
25 | } // namespace Service
26 |
27 | #endif // !__HELLO_WORLD_COMMON_ID_SERVICE_H__
28 |
--------------------------------------------------------------------------------
/examples/microservices/service/src/id/service.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 08.2017
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MICROSERVICES_SERVICE_ID_SERVICE_H__
9 | #define __MICROSERVICES_SERVICE_ID_SERVICE_H__
10 |
11 | // MIF
12 | #include
13 |
14 | namespace Service
15 | {
16 | namespace Id
17 | {
18 |
19 | enum
20 | {
21 | Employee = Mif::Common::Crc32("Employee.Http")
22 | };
23 |
24 | } // namespace Id
25 | } // namespace Service
26 |
27 | #endif // !__MICROSERVICES_SERVICE_ID_SERVICE_H__
28 |
--------------------------------------------------------------------------------
/include/mif/net/ipublisher.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 09.2016
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MIF_NET_IPUBLISHER_H__
9 | #define __MIF_NET_IPUBLISHER_H__
10 |
11 | // MIF
12 | #include "mif/common/types.h"
13 |
14 | namespace Mif
15 | {
16 | namespace Net
17 | {
18 |
19 | struct IPublisher
20 | {
21 | virtual ~IPublisher() = default;
22 | virtual void Publish(Common::Buffer buffer) = 0;
23 | };
24 |
25 |
26 | } // namespace Net
27 | } // namespace Mif
28 |
29 | #endif // !__MIF_NET_IPUBLISHER_H__
30 |
--------------------------------------------------------------------------------
/examples/http_crud/config/config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 0
5 |
6 | 4
7 | .
8 | log_%5N.log
9 |
10 |
11 |
12 |
13 | 0.0.0.0
14 | 55555
15 | 8
16 | 10000000
17 |
18 |
19 | localhost
20 | 5432
21 | postgres
22 | postgres
23 | crud_test
24 | 10
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/include/mif/net/ihandler.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 09.2016
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MIF_NET_IHANDLER_H__
9 | #define __MIF_NET_IHANDLER_H__
10 |
11 | // MIF
12 | #include "mif/common/types.h"
13 |
14 | namespace Mif
15 | {
16 | namespace Net
17 | {
18 |
19 | struct IHandler
20 | {
21 | virtual ~IHandler() = default;
22 | virtual void OnData(Common::Buffer buffer) = 0;
23 | virtual void OnClose() = 0;
24 | };
25 |
26 | } // namespace Net
27 | } // namespace Mif
28 |
29 | #endif // !__MIF_NET_IHANDLER_H__
30 |
--------------------------------------------------------------------------------
/examples/http_echo_server/config/config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 0
5 |
6 | 4
7 | .
8 | log_%5N.log
9 |
10 |
11 |
12 |
13 | 0.0.0.0
14 | 55555
15 | 8
16 | 10000000
17 |
18 | 512
19 | 1024
20 | 1024
21 | 4
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/template/src/main.cpp:
--------------------------------------------------------------------------------
1 | // MIF
2 | #include
3 | #include
4 |
5 | class Application
6 | : public Mif::Application::Application
7 | {
8 | public:
9 | Application(int argc, char const **argv)
10 | : Mif::Application::Application{argc, argv}
11 | {
12 | MIF_LOG(Info) << "Application";
13 | }
14 |
15 | ~Application()
16 | {
17 | MIF_LOG(Info) << "~Application";
18 | }
19 |
20 | virtual void OnStart() override final
21 | {
22 | MIF_LOG(Info) << "OnStart";
23 | }
24 |
25 | virtual void OnStop() override final
26 | {
27 | MIF_LOG(Info) << "OnStop";
28 | }
29 | };
30 |
31 | int main(int argc, char const **argv)
32 | {
33 | return Mif::Application::Run(argc, argv);
34 | }
35 |
--------------------------------------------------------------------------------
/examples/microservices/config/storage.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 0
5 |
6 | 4
7 | .
8 | log_%5N.log
9 |
10 |
11 |
12 |
13 | 0.0.0.0
14 | 55000
15 | 8
16 | 10000000
17 |
18 |
19 | localhost
20 | 5432
21 | postgres
22 | postgres
23 | crud_test
24 | 10
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/include/mif/net/http/servlet.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 12.2016
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MIF_NET_HTTP_SERVLET_H__
9 | #define __MIF_NET_HTTP_SERVLET_H__
10 |
11 | // MIF
12 | #include "mif/net/iclient_factory.h"
13 | #include "mif/net/http/request_handler.h"
14 |
15 | namespace Mif
16 | {
17 | namespace Net
18 | {
19 | namespace Http
20 | {
21 |
22 | ServerHandler MakeServlet(std::shared_ptr factory, std::uint32_t sessionTimeout = 180 /*seconds*/);
23 |
24 | } // namespace Http
25 | } // namespace Net
26 | } // namespace Mif
27 |
28 | #endif // !__MIF_NET_HTTP_SERVLET_H__
29 |
--------------------------------------------------------------------------------
/include/mif/net/iconnection.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 07.2017
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MIF_NET_ICONNECTION_H__
9 | #define __MIF_NET_ICONNECTION_H__
10 |
11 | // STD
12 | #include
13 |
14 | // MIF
15 | #include "mif/net/client.h"
16 |
17 | namespace Mif
18 | {
19 | namespace Net
20 | {
21 |
22 | struct IConnection
23 | {
24 | virtual ~IConnection() = default;
25 |
26 | using ClientPtr = std::shared_ptr;
27 |
28 | virtual ClientPtr GetClient() = 0;
29 | };
30 |
31 | } // namespace Net
32 | } // namespace Mif
33 |
34 | #endif // !__MIF_NET_ICONNECTION_H__
35 |
--------------------------------------------------------------------------------
/include/mif/service/icheckable.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 05.2017
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MIF_SERVICE_ICHECKABLE_H__
9 | #define __MIF_SERVICE_ICHECKABLE_H__
10 |
11 | // MIF
12 | #include "mif/service/iservice.h"
13 | #include "mif/service/make.h"
14 |
15 | namespace Mif
16 | {
17 | namespace Service
18 | {
19 |
20 | struct ICheckable
21 | : public Inherit
22 | {
23 | virtual bool IsGood() const = 0;
24 | };
25 |
26 | using ICheckablePtr = Service::TServicePtr;
27 |
28 | } // namespace Service
29 | } // namespace Mif
30 |
31 | #endif // !__MIF_SERVICE_ICHECKABLE_H__
32 |
--------------------------------------------------------------------------------
/include/mif/db/iconnection_pool.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 10.2017
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MIF_DB_ICONNECTION_POOL_H__
9 | #define __MIF_DB_ICONNECTION_POOL_H__
10 |
11 | // MIF
12 | #include "mif/db/iconnection.h"
13 |
14 | namespace Mif
15 | {
16 | namespace Db
17 | {
18 |
19 | struct IConnectionPool
20 | : public Service::Inherit
21 | {
22 | virtual IConnectionPtr GetConnection() const = 0;
23 | };
24 |
25 | using IConnectionPoolPtr = Service::TServicePtr;
26 |
27 | } // namespace Db
28 | } // namespace Mif
29 |
30 | #endif // !__MIF_DB_ICONNECTION_POOL_H__
31 |
--------------------------------------------------------------------------------
/examples/microservices/common/include/common/id/service.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 08.2017
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MICROSERVICES_COMMON_ID_SERVICE_H__
9 | #define __MICROSERVICES_COMMON_ID_SERVICE_H__
10 |
11 | // MIF
12 | #include
13 |
14 | namespace Common
15 | {
16 | namespace Service
17 | {
18 | namespace Id
19 | {
20 |
21 | enum
22 | {
23 | PGEmployeeStorage = Mif::Common::Crc32("EmployeeStorage.PostgreSQL")
24 | };
25 |
26 | } // namespace Id
27 | } // namespace Service
28 | } // namespace Common
29 |
30 | #endif // !__MICROSERVICES_COMMON_ID_SERVICE_H__
31 |
--------------------------------------------------------------------------------
/include/mif/common/hash_calc.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 04.2021
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MIF_COMMON_HASH_CALC_H__
9 | #define __MIF_COMMON_HASH_CALC_H__
10 |
11 | // STD
12 | #include
13 | #include
14 |
15 | namespace Mif
16 | {
17 | namespace Common
18 | {
19 | namespace Hash
20 | {
21 |
22 | std::string Crc32(void const *data, std::size_t size);
23 | std::string Md5(void const *data, std::size_t size);
24 | std::string Sha1(void const *data, std::size_t size);
25 |
26 | } // namespace Hash
27 | } // namespace Common
28 | } // namespace Mif
29 |
30 | #endif // !__MIF_COMMON_HASH_CALC_H__
31 |
--------------------------------------------------------------------------------
/examples/inheritance/server/src/main.cpp:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 01.2017
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | // MIF
9 | #include
10 |
11 | // COMMON
12 | #include "common/id/service.h"
13 | #include "common/ps/iface.h"
14 |
15 | class Application
16 | : public Mif::Application::TcpService
17 | {
18 | public:
19 | using TcpService::TcpService;
20 |
21 | private:
22 | // Mif.Application.TcpService
23 | virtual void Init(Mif::Service::FactoryPtr factory) override final
24 | {
25 | factory->AddClass<::Service::Id::Service>();
26 | }
27 | };
28 |
29 | int main(int argc, char const **argv)
30 | {
31 | return Mif::Application::Run(argc, argv);
32 | }
33 |
--------------------------------------------------------------------------------
/examples/visitor/server/src/main.cpp:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 02.2017
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | // MIF
9 | #include
10 |
11 | // COMMON
12 | #include "common/id/service.h"
13 | #include "common/ps/iface.h"
14 |
15 | class Application
16 | : public Mif::Application::TcpService
17 | {
18 | public:
19 | using TcpService::TcpService;
20 |
21 | private:
22 | // Mif.Application.TcpService
23 | virtual void Init(Mif::Service::FactoryPtr factory) override final
24 | {
25 | factory->AddClass<::Service::Id::Service>();
26 | }
27 | };
28 |
29 | int main(int argc, char const **argv)
30 | {
31 | return Mif::Application::Run(argc, argv);
32 | }
33 |
--------------------------------------------------------------------------------
/examples/complex_type/server/src/main.cpp:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 10.2016
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | // MIF
9 | #include
10 |
11 | // COMMON
12 | #include "common/id/service.h"
13 | #include "common/ps/imy_company.h"
14 |
15 | class Application
16 | : public Mif::Application::TcpService
17 | {
18 | public:
19 | using TcpService::TcpService;
20 |
21 | private:
22 | // Mif.Application.Application
23 | virtual void Init(Mif::Service::FactoryPtr factory) override final
24 | {
25 | factory->AddClass<::Service::Id::MyCompany>();
26 | }
27 | };
28 |
29 | int main(int argc, char const **argv)
30 | {
31 | return Mif::Application::Run(argc, argv);
32 | }
33 |
--------------------------------------------------------------------------------
/examples/hello_world/server/src/main.cpp:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 09.2016
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | // MIF
9 | #include
10 |
11 | // COMMON
12 | #include "common/id/service.h"
13 | #include "common/ps/ihello_world.h"
14 |
15 | class Application
16 | : public Mif::Application::TcpService
17 | {
18 | public:
19 | using TcpService::TcpService;
20 |
21 | private:
22 | // Mif.Application.TcpService
23 | virtual void Init(Mif::Service::FactoryPtr factory) override final
24 | {
25 | factory->AddClass();
26 | }
27 | };
28 |
29 | int main(int argc, char const **argv)
30 | {
31 | return Mif::Application::Run(argc, argv);
32 | }
33 |
--------------------------------------------------------------------------------
/examples/http/common/include/common/interface/iadmin.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 03.2017
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __HTTP_COMMON_INTERFACE_IADMIN_H__
9 | #define __HTTP_COMMON_INTERFACE_IADMIN_H__
10 |
11 | // STD
12 | #include
13 |
14 | // MIF
15 | #include
16 |
17 | namespace Service
18 | {
19 |
20 | struct IAdmin
21 | : public Mif::Service::Inherit
22 | {
23 | virtual void SetTitle(std::string const &title) = 0;
24 | virtual void SetBody(std::string const &body) = 0;
25 | virtual std::string GetPage() const = 0;
26 | };
27 |
28 | } // namespace Service
29 |
30 | #endif // !__HTTP_COMMON_INTERFACE_IADMIN_H__
31 |
--------------------------------------------------------------------------------
/include/mif/remote/meta/iservice.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 02.2017
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MIF_REMOTE_META_ISERVICE_H__
9 | #define __MIF_REMOTE_META_ISERVICE_H__
10 |
11 | // MIF
12 | #include "mif/remote/ps.h"
13 | #include "mif/service/iservice.h"
14 |
15 | namespace Mif
16 | {
17 | namespace Service
18 | {
19 | namespace Meta
20 | {
21 |
22 | using Service::IService;
23 |
24 | MIF_REMOTE_PS_BEGIN(IService)
25 | MIF_REMOTE_PS_END()
26 |
27 | } // namespace Meta
28 | } // namespace Service
29 | } // namespace Mif
30 |
31 | MIF_REMOTE_REGISTER_PS(Mif::Service::Meta::IService)
32 |
33 | #endif // !__MIF_REMOTE_META_ISERVICE_H__
34 |
--------------------------------------------------------------------------------
/include/mif/common/log_init.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 11.2016
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MIF_COMMON_LOG_INIT_H__
9 | #define __MIF_COMMON_LOG_INIT_H__
10 |
11 | // STD
12 | #include
13 | #include
14 |
15 | // MIF
16 | #include "mif/common/log.h"
17 |
18 | namespace Mif
19 | {
20 | namespace Common
21 | {
22 |
23 | void InitConsoleLog(Log::Level const &level = Log::Level::Trace);
24 |
25 | void InitFileLog(Log::Level const &level,
26 | std::string const &logDir, std::string const &filePattern,
27 | std::size_t maxSize = 1, std::size_t maxCount = 10);
28 |
29 | } // namespace Common
30 | } // namespace Mif
31 |
32 | #endif // !__MIF_COMMON_LOG_INIT_H__
33 |
--------------------------------------------------------------------------------
/include/mif/common/uuid_generator.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 09.2016
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MIF_COMMON_UUID_GENERATOR_H__
9 | #define __MIF_COMMON_UUID_GENERATOR_H__
10 |
11 | // STD
12 | #include
13 | #include
14 |
15 | namespace Mif
16 | {
17 | namespace Common
18 | {
19 |
20 | class UuidGenerator final
21 | {
22 | public:
23 | UuidGenerator();
24 | ~UuidGenerator();
25 |
26 | std::string Generate() const;
27 |
28 | private:
29 | class Impl;
30 | std::unique_ptr m_impl;
31 | };
32 |
33 | } // namespace Common
34 | } // namespace Mif
35 |
36 | #endif // !__MIF_COMMON_UUID_GENERATOR_H__
37 |
--------------------------------------------------------------------------------
/examples/hello_world/common/include/common/interface/ihello_world.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 09.2016
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __HELLO_WORLD_COMMON_INTERFACE_IHELLO_WORLD_H__
9 | #define __HELLO_WORLD_COMMON_INTERFACE_IHELLO_WORLD_H__
10 |
11 | // STD
12 | #include
13 |
14 | // MIF
15 | #include
16 |
17 | namespace Service
18 | {
19 |
20 | struct IHelloWorld
21 | : public Mif::Service::Inherit
22 | {
23 | virtual void AddWord(std::string const &word) = 0;
24 | virtual std::string GetText() const = 0;
25 | virtual void Clean() = 0;
26 | };
27 |
28 | } // namespace Service
29 |
30 | #endif // !__HELLO_WORLD_COMMON_INTERFACE_IHELLO_WORLD_H__
31 |
--------------------------------------------------------------------------------
/include/mif/service/id/service.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 01.2017
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MIF_SERVICE_ID_SERVICE_H__
9 | #define __MIF_SERVICE_ID_SERVICE_H__
10 |
11 | // MIF
12 | #include "mif/common/crc32.h"
13 |
14 | namespace Mif
15 | {
16 | namespace Service
17 | {
18 | namespace Id
19 | {
20 |
21 | enum
22 | {
23 |
24 | Locator = Common::Crc32("Mif.Service.Locator"),
25 | Pool = Common::Crc32("Mif.Service.Pool"),
26 | PerThreadPool = Common::Crc32("Mif.Service.PerThreadPool")
27 |
28 | };
29 |
30 | } // namespace Id
31 | } // namespace Service
32 | } // namespace Mif
33 |
34 | #endif // !__MIF_SERVICE_ID_SERVICE_H__
35 |
--------------------------------------------------------------------------------
/include/mif/net/http/detail/content_tags.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 12.2017
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MIF_NET_HTTP_DETAIL_CONTENT_TAGS_H__
9 | #define __MIF_NET_HTTP_DETAIL_CONTENT_TAGS_H__
10 |
11 | // MIF
12 | #include "mif/common/static_string.h"
13 |
14 | namespace Mif
15 | {
16 | namespace Net
17 | {
18 | namespace Http
19 | {
20 | namespace Detail
21 | {
22 | namespace Tag
23 | {
24 |
25 | using Document = MIF_STATIC_STR("document");
26 |
27 | } // namespace Tag
28 | } // namespace Detail
29 | } // namespace Http
30 | } // namespace Net
31 | } // namespace Mif
32 |
33 |
34 | #endif // !__MIF_NET_HTTP_DETAIL_CONTENT_TAGS_H__
35 |
--------------------------------------------------------------------------------
/include/mif/common/icollection.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 03.2017
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MIF_COMMON_ICOLLECTION_H__
9 | #define __MIF_COMMON_ICOLLECTION_H__
10 |
11 | // MIF
12 | #include "mif/service/iservice.h"
13 |
14 | namespace Mif
15 | {
16 | namespace Common
17 | {
18 |
19 | struct ICollection
20 | : public Service::Inherit
21 | {
22 | virtual bool IsEmpty() const = 0;
23 | virtual void Reset() = 0;
24 | virtual Service::IServicePtr Get() = 0;
25 | virtual bool Next() = 0;
26 | };
27 |
28 | using ICollectionPtr = Service::TServicePtr;
29 |
30 | } // namespace Common
31 | } // namespace Mif
32 |
33 | #endif // !__MIF_COMMON_ICOLLECTION_H__
34 |
--------------------------------------------------------------------------------
/include/mif/remote/serialization/serialization.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 09.2016
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MIF_REMOTE_SERIALIZATION_SERIALIZATION_H__
9 | #define __MIF_REMOTE_SERIALIZATION_SERIALIZATION_H__
10 |
11 | namespace Mif
12 | {
13 | namespace Remote
14 | {
15 | namespace Serialization
16 | {
17 |
18 | template
19 | class SerializerTraits final
20 | {
21 | public:
22 | using Serializer = TSerializer;
23 | using Deserializer = TDeserializer;
24 | };
25 |
26 | } // namespace Serialization
27 | } // namespace Remote
28 | } // namespace Mif
29 |
30 |
31 | #endif // !__MIF_REMOTE_SERIALIZATION_SERIALIZATION_H__
32 |
--------------------------------------------------------------------------------
/examples/complex_type/common/include/common/interface/imy_company.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 10.2016
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __COMPLEX_TYPE_COMMON_INTERFACE_IMYCOMPANY_H__
9 | #define __COMPLEX_TYPE_COMMON_INTERFACE_IMYCOMPANY_H__
10 |
11 | // MIF
12 | #include
13 |
14 | // THIS
15 | #include "common/data/data.h"
16 |
17 | namespace Service
18 | {
19 |
20 | struct IMyCompany
21 | : public Mif::Service::Inherit
22 | {
23 | virtual Data::ID AddEmployee(Data::Employee const &employee) = 0;
24 | virtual void RemoveAccount(Data::ID const &id) = 0;
25 | virtual Data::Employees GetEmployees() const = 0;
26 | };
27 |
28 | } // namespace Service
29 |
30 | #endif // !__COMPLEX_TYPE_COMMON_INTERFACE_IMYCOMPANY_H__
31 |
--------------------------------------------------------------------------------
/include/mif/db/istatement.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 03.2017
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MIF_DB_ISTATEMENT_H__
9 | #define __MIF_DB_ISTATEMENT_H__
10 |
11 | // STD
12 | #include
13 |
14 | // MIF
15 | #include "mif/db/irecordset.h"
16 | #include "mif/service/iservice.h"
17 |
18 | namespace Mif
19 | {
20 | namespace Db
21 | {
22 |
23 | struct IStatement
24 | : public Service::Inherit
25 | {
26 | using Parameters = std::list;
27 |
28 | virtual IRecordsetPtr Execute(Parameters const ¶meters = {}) = 0;
29 | };
30 |
31 | using IStatementPtr = Service::TServicePtr;
32 |
33 | } // namespace Db
34 | } // namespace Mif
35 |
36 | #endif // !__MIF_DB_ISTATEMENT_H__
37 |
--------------------------------------------------------------------------------
/include/mif/remote/meta/service/icheckable.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 05.2020
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MIF_REMOTE_META_SERVICE_ICHECKABLE_H__
9 | #define __MIF_REMOTE_META_SERVICE_ICHECKABLE_H__
10 |
11 | // MIF
12 | #include "mif/remote/ps.h"
13 | #include "mif/service/icheckable.h"
14 |
15 | namespace Mif
16 | {
17 | namespace Service
18 | {
19 | namespace Meta
20 | {
21 |
22 | using Service::ICheckable;
23 |
24 | MIF_REMOTE_PS_BEGIN(ICheckable)
25 | MIF_REMOTE_METHOD(IsGood)
26 | MIF_REMOTE_PS_END()
27 |
28 | } // namespace Meta
29 | } // namespace Service
30 | } // namespace Mif
31 |
32 | MIF_REMOTE_REGISTER_PS(Mif::Service::Meta::ICheckable)
33 |
34 | #endif // !__MIF_REMOTE_META_SERVICE_ICHECKABLE_H__
35 |
--------------------------------------------------------------------------------
/include/mif/db/iconnection.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 03.2017
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MIF_DB_ICONNECTION_H__
9 | #define __MIF_DB_ICONNECTION_H__
10 |
11 | // STD
12 | #include
13 |
14 | // MIF
15 | #include "mif/db/istatement.h"
16 | #include "mif/service/iservice.h"
17 |
18 | namespace Mif
19 | {
20 | namespace Db
21 | {
22 |
23 | struct IConnection
24 | : public Service::Inherit
25 | {
26 | virtual void ExecuteDirect(std::string const &query) = 0;
27 | virtual IStatementPtr CreateStatement(std::string const &query) = 0;
28 | };
29 |
30 | using IConnectionPtr = Service::TServicePtr;
31 |
32 | } // namespace Db
33 | } // namespace Mif
34 |
35 | #endif // !__MIF_DB_ICONNECTION_H__
36 |
--------------------------------------------------------------------------------
/examples/http/common/include/common/ps/iadmin.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 03.2017
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __HTTP_COMMON_PS_IADMIN_H__
9 | #define __HTTP_COMMON_PS_IADMIN_H__
10 |
11 | // STD
12 | #include
13 |
14 | // MIF
15 | #include
16 |
17 | // THIS
18 | #include "common/interface/iadmin.h"
19 |
20 | namespace Service
21 | {
22 | namespace Meta
23 | {
24 |
25 | using namespace ::Service;
26 |
27 | MIF_REMOTE_PS_BEGIN(IAdmin)
28 | MIF_REMOTE_METHOD(SetTitle)
29 | MIF_REMOTE_METHOD(SetBody)
30 | MIF_REMOTE_METHOD(GetPage)
31 | MIF_REMOTE_PS_END()
32 |
33 | } // namespace Meta
34 | } // namespace Service
35 |
36 | MIF_REMOTE_REGISTER_PS(Service::Meta::IAdmin)
37 |
38 | #endif // !__HTTP_COMMON_PS_IADMIN_H__
39 |
--------------------------------------------------------------------------------
/include/mif/service/ipool.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 05.2017
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MIF_SERVICE_IPOOL_H__
9 | #define __MIF_SERVICE_IPOOL_H__
10 |
11 | // MIF
12 | #include "mif/service/iservice.h"
13 | #include "mif/service/make.h"
14 |
15 | namespace Mif
16 | {
17 | namespace Service
18 | {
19 |
20 | struct IPool
21 | : public Inherit
22 | {
23 | virtual IServicePtr GetService() const = 0;
24 |
25 | template
26 | TServicePtr GetService() const
27 | {
28 | return Service::Cast(GetService());
29 | }
30 | };
31 |
32 | using IPoolPtr = Service::TServicePtr;
33 |
34 | } // namespace Service
35 | } // namespace Mif
36 |
37 | #endif // !__MIF_SERVICE_IPOOL_H__
38 |
--------------------------------------------------------------------------------
/src/mif/remote/factory.cpp:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 07.2017
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | // STD
9 | #include
10 |
11 | // MIF
12 | #include "mif/remote/factory.h"
13 |
14 | namespace Mif
15 | {
16 | namespace Remote
17 | {
18 |
19 | Factory::Factory(std::shared_ptr connection, ServiceCreator const &serviceCreator)
20 | : m_connection{connection}
21 | , m_serviceCreator{serviceCreator}
22 | {
23 | if (!m_connection)
24 | throw std::invalid_argument{"[Mif::Remote::Factory] Empty connection ptr."};
25 | }
26 |
27 | Service::IServicePtr Factory::Create(Service::ServiceId id)
28 | {
29 | return m_serviceCreator(m_connection->GetClient(), id);
30 | }
31 |
32 | } // namespace Remote
33 | } // namespace Mif
34 |
--------------------------------------------------------------------------------
/include/mif/net/http/codes.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 12.2016
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MIF_NET_HTTP_CODES_H__
9 | #define __MIF_NET_HTTP_CODES_H__
10 |
11 | namespace Mif
12 | {
13 | namespace Net
14 | {
15 | namespace Http
16 | {
17 |
18 | enum class Code
19 | {
20 | Ok,
21 | NoContent,
22 | MovePerm,
23 | MoveTemp,
24 | NotModified,
25 | BadRequest,
26 | NotFound,
27 | BadMethod,
28 | Unauthorized,
29 | Internal,
30 | NotImplemented,
31 | Unavaliable
32 | };
33 |
34 | } // namespace Http
35 | } // namespace Net
36 | } // namespace Mif
37 |
38 | #endif // !__MIF_NET_HTTP_CODES_H__
39 |
--------------------------------------------------------------------------------
/examples/hello_world/common/include/common/ps/ihello_world.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 09.2016
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __HELLO_WORLD_COMMON_PS_IHELLO_WORLD_H__
9 | #define __HELLO_WORLD_COMMON_PS_IHELLO_WORLD_H__
10 |
11 | // STD
12 | #include
13 |
14 | // MIF
15 | #include
16 |
17 | // THIS
18 | #include "common/interface/ihello_world.h"
19 |
20 | namespace Service
21 | {
22 | namespace Meta
23 | {
24 |
25 | using namespace ::Service;
26 |
27 | MIF_REMOTE_PS_BEGIN(IHelloWorld)
28 | MIF_REMOTE_METHOD(AddWord)
29 | MIF_REMOTE_METHOD(GetText)
30 | MIF_REMOTE_METHOD(Clean)
31 | MIF_REMOTE_PS_END()
32 |
33 | } // namespace Meta
34 | } // namespace Service
35 |
36 | MIF_REMOTE_REGISTER_PS(Service::Meta::IHelloWorld)
37 |
38 | #endif // !__HELLO_WORLD_COMMON_PS_IHELLO_WORLD_H__
39 |
--------------------------------------------------------------------------------
/examples/common/cmake/settings.cmake:
--------------------------------------------------------------------------------
1 | set (PROJECT_SERVER_NAME "${PROJECT_LC}_server")
2 | set (PROJECT_CLIENT_NAME "${PROJECT_LC}_client")
3 |
4 | set (CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/MyCMakeScripts)
5 | set (EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
6 | set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib)
7 |
8 | set (MIF_LIB_INSTALL_PATH, ${PROJECT_SOURCE_DIR}/MyCMakeScripts/lib/mif)
9 |
10 | set (MIF_STD_CXX "c++11")
11 |
12 | set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -W -Wall -std=${MIF_STD_CXX}")
13 | set (CMAKE_CXX_FLAGS_RELEASE "-O3 -g0 -DNDEBUG")
14 | #set (CMAKE_EXE_LINKER_FLAGS "-static-libstdc++")
15 | set (CMAKE_POSITION_INDEPENDENT_CODE ON)
16 |
17 | set(LIBRARIES
18 | ${LIBRARIES}
19 | mif
20 | boost_iostreams
21 | boost_json
22 | boost_date_time
23 | boost_serialization
24 | boost_program_options
25 | boost_log
26 | boost_filesystem
27 | boost_thread
28 | boost_system
29 | pthread
30 | z
31 | rt
32 | )
33 |
34 | if (MIF_WITH_POSTGRESQL)
35 | set(LIBRARIES
36 | ${LIBRARIES}
37 | pq
38 | )
39 | endif()
40 |
--------------------------------------------------------------------------------
/examples/complex_type/common/include/common/ps/imy_company.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 10.2016
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __COMPLEX_TYPE_COMMON_PS_IMYCOMPANY_H__
9 | #define __COMPLEX_TYPE_COMMON_PS_IMYCOMPANY_H__
10 |
11 | // MIF
12 | #include
13 |
14 | // THIS
15 | #include "common/interface/imy_company.h"
16 | #include "common/meta/data.h"
17 |
18 | namespace Service
19 | {
20 | namespace Meta
21 | {
22 |
23 | using namespace ::Service;
24 |
25 | MIF_REMOTE_PS_BEGIN(IMyCompany)
26 | MIF_REMOTE_METHOD(AddEmployee)
27 | MIF_REMOTE_METHOD(RemoveAccount)
28 | MIF_REMOTE_METHOD(GetEmployees)
29 | MIF_REMOTE_PS_END()
30 |
31 | } // namespace Meta
32 | } // namespace Service
33 |
34 | MIF_REMOTE_REGISTER_PS(Service::Meta::IMyCompany)
35 |
36 | #endif // !__COMPLEX_TYPE_COMMON_PS_IMYCOMPANY_H__
37 |
--------------------------------------------------------------------------------
/include/mif/net/http/iweb_service.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 03.2017
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MIF_NET_HTTP_IWEB_SERVICE_H__
9 | #define __MIF_NET_HTTP_IWEB_SERVICE_H__
10 |
11 | // MIF
12 | #include "mif/net/http/iinput_pack.h"
13 | #include "mif/net/http/ioutput_pack.h"
14 | #include "mif/service/iservice.h"
15 |
16 | namespace Mif
17 | {
18 | namespace Net
19 | {
20 | namespace Http
21 | {
22 |
23 | struct IWebService
24 | : public Service::Inherit
25 | {
26 | virtual void OnRequest(IInputPack const &request, IOutputPack &response) = 0;
27 | };
28 |
29 | using IWebServicePtr = Service::TIntrusivePtr;
30 |
31 | } // namespace Http
32 | } // namespace Net
33 | } // namespace Mif
34 |
35 | #endif // !__MIF_NET_HTTP_IWEB_SERVICE_H__
36 |
--------------------------------------------------------------------------------
/include/mif/net/http/request_handler.h:
--------------------------------------------------------------------------------
1 | //-------------------------------------------------------------------
2 | // MetaInfo Framework (MIF)
3 | // https://github.com/tdv/mif
4 | // Created: 11.2016
5 | // Copyright (C) 2016-2024 tdv
6 | //-------------------------------------------------------------------
7 |
8 | #ifndef __MIF_NET_HTTP_REQUEST_HANDLER_H__
9 | #define __MIF_NET_HTTP_REQUEST_HANDLER_H__
10 |
11 | // STD
12 | #include
13 | #include