kkAyatakaのメモ帳。

誰かの役に立つかもしれない備忘録。

C++

plusctx (処理履歴の保存と参照)

C++

ライブラリというよりは実装アイデアという感じ。ロギングの課題を解決するために考えていところ、構造的に割と面白かったので組んでみた。 組んだ後でスタックトレースで良いのでは?とも思ったけど、まあ、マルチプラットフォームで取ったり、整形したり、…

Google Testでデータドリブンテスト

C++

Google TestのValue-Parameterized Tests testing::TestWithParam、TEST_P、INSTANTIATE_TEST_SUITE_Pを使う 他の (言語の) テスティングフレームワークで、同一のテストを異なるデータで実行するデータドリブンテストの機能があって、これGoogle Testでも無…

XcodeとgcovrでC++コードのカバレッジを計測する

Xcodeでgcov形式のカバレッジデータ (ステートメントカバレッジとブランチカバレッジ) を出力 gcoverで可視化 Xcode単体では可視化できないブランチカバレッジを取り扱える。 Xcodeへのシームレスな統合は失われるが、設定・実行は簡単で、手順はシンプルに…

XcodeでC++のカバレッジを計測する

ステートメントカバレッジ (C0) 相当を計測できる C++コードの計測が可能 hppはコンパイル対象のファイルとして含める必要がある 厳密にはラインカバレッジらしい。また、ブランチカバレッジは取れない。 環境 macOS 10.15.5 Xcode 11.5 C++ ヘッダーオンリ…

OpenSSLを使った暗号化 (v1.1.1d)

C++

2015-10-24にOpenSSLでの暗号化の記事を書いたけど、 最近になって試したところコンパイルできなくなっていたので、その修正版。 昔の記事、バージョン書いてなかったから差がわかんね。 環境 OpenSSL v1.1.1d (ソースからビルド) macOS 10.15.3 Xcode 11.3.…

C++向けライブラリの一部実装をSwiftで行おうとして諦めた話

MacでC++のプログラミングをしているとCoreFoundationでは機能が足りないことがある。これまではObjective-Cの関数をC言語スタイルの関数にラップして使用するということをよくやっていた。 今回どうせならObjective-CではなくSwiftでやれないかと試したけど…

OpenSSLを使った暗号化

C++

本記事に記載のOpenSSLはバージョンが古いです v1.1.1dのAPIについてはこちらの記事をどうぞ OpenSSLを使ってAESで暗号化。 暗号化 #include <openssl/evp.h> EVP_CIPHER_CTX ctx = {}; EVP_CIPHER_CTX_init(&ctx); // 暗号化の設定で、EVP_aes_128_ecb等いろいろ const uns</openssl/evp.h>…

C++のラムダがCのコールバックにつかえる

ためしにやったら動いた。さすがC++。 #include <Windows.h> #include <iostream> int main() { HWINSTA sta = GetProcessWindowStation(); EnumDesktops( sta, [](LPTSTR desktop, LPARAM lp)->BOOL { std::cout << desktop << std::endl; return TRUE; }, 0); } Win32は列挙系で</iostream></windows.h>…

Boost.Testの利用で変な風にはまる

Boost.Testを使い始めようと試していたら、次のエラーが出て、詰まっていました。 LINK : fatal error LNK1561: エントリー ポイントを定義しなければなりません。ソースは次のとおりの簡単なもの。 #define BOOST_TEST_MODULE unit_test #include <boost/test/unit_test.hpp> BOOST_AU</boost/test/unit_test.hpp>…

Boost.Logはとりあえずこう使ってみる。

これまでの記事でいろいろ書いてきましたが、全部まとめて、とりあえずこんな設定で使ってみようと思っています。問題が出たらつどつど。 コンソールに出力する Visual Studioに出力する ファイルに出力する ログファイルはローテーションの設定をする 日付…

Boost 1.54.0のLogをMac 10.7 (Xcode 4)でつかう。

10.8、10.9でもXcode 4系なら多分同じ。注意点は2つ clangでビルドする dylibを使う clangでビルド 環境は次の通り 10.7.5 Xcode 4.6.3 clang (Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn) GCC(引数指定無し)でビルドすると、途中で失…

Boost.Logでファイルに出力する

Log出力するならやっぱりファイルに出力したいので、ファイル出力の設定をします。Log用のライブラリを使うなら、ログローテーションを活用しない手は無いですね。出力用のbackendはtext_file_backendになるので、既定どおりbackend -> sink -> loggerに設定…

Boost.Logのtext_ostream_backend

BOOST_LOG_TRIVIALは何の設定も無くログをコンソールに出力できますが、新しいbackend(のためのsink)を設定すると出力されなくなります。これでは少し都合が悪いので、自前でコンソール用のbackend(sink)を用意します。ストリームへの出力なので、次を使いま…

Boost.Logの出力をVisual Studioの出力に表示する

Win APIのOutputDebugStringを使用することで、Visual Studioの出力ウィンドウにログを表示することができます。Boost.Logでは同様の機能を持った、専用のbackendが標準で用意されているので、それを利用することで、Boost.Logの出力をVS上に表示することが…

Boost.Logを使う。

Boost 1.54.0からLogが入ったので使ってみました。ログの取り回しは、とりあえずグローバルに1つあればよいので、Boost.Logのチュートリアルにあるように、TRIVIALを使っていきます。 BOOST_LOG_TRIVIAL チュートリアルほぼまんまですが。レベルでフィルタわ…

BoostのMac用dylibのビルドで、install_nameを変更する

b2の引数等いろいろ調べたり試したりしたけど、ダメで、結局*.jamファイルを変更した。 Mac OS X 10.7.5 boost 1.54.0 Xcode 4.6.3 (Apple LLVM 4.2) Boost.Logを使おうと思ったところ、どうにもMacはstaticライブラリが使えないようで...Macでsharedライブ…

Boost.DateTimeのフォーマット

gregorian::dateやposix_time::ptimeはISO形式での出力になる。日付を「/」区切りや、ファイルパス/名前などに利用したりと、都合よく整形したい場合はそれぞれのfacetを利用する。 date_facet, time_facet 変換は、gregorian::date_facet、posix_time::tim…

Boost.DateTimeでUTCとLocalの変換

posix_time::ptimeのutc local変換。 utc to local 変換方法2種。1つ目はC言語関数ラッパーを使うもの。これはutc -> localのみの変換。通常はこれだけで事足りそう。 #include <boost/date_time/c_local_time_adjustor.hpp> date_time::c_local_adjustor<posix_time::ptime> adj1; posix_time::ptime t1 = adj1.utc_to_loca</posix_time::ptime></boost/date_time/c_local_time_adjustor.hpp>…

CppUnitのautoRegisterRegistry__

C++

CppUnitのテストケースを次のようにヘッダーに直接書いていまして、 #include <cppunit/TestFixture.h> #include <cppunit/extensions/HelperMacros.h> class Test : public CPPUNIT_NS::TestFixture { CPPUNIT_TEST_SUITE(Test); CPPUNIT_TEST(test); CPPUNIT_TEST_SUITE_END(); public: void test() { } }; CPPUNIT_TE</cppunit/extensions/helpermacros.h></cppunit/testfixture.h>…