[過去ログ] Boost総合スレ part8 (1001レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
476(1): 2010/01/13(水) 00:11:50 AAS
外部リンク[html]:www.kt.rim.or.jp
477(1): 2010/01/13(水) 00:18:15 AAS
外部リンク[html]:grayhole.blogspot.com
478(1): 2010/01/13(水) 00:24:39 AAS
外部リンク:blog.goo.ne.jp
479: 2010/01/13(水) 00:26:48 AAS
>>475
boostに固執する意味はないので,本質的にはその方法で解決できそうです.
ありがとうございます.
自分でサーベイしたところ
今の時点でboostでもリゾルバに頼れば出来るということが分かりました.
外部リンク:groups.google.co.jp
外部リンク[html]:grayhole.blogspot.com
ただ
DNS情報がないと駄目なので一部の環境では動かないことが予想されますが...
480: 2010/01/13(水) 00:28:28 AAS
>>476,477,478
のろのろ書いてる間にすみません.
ありがとうございます.
481(3): 2010/01/16(土) 17:15:45 AAS
std::vector<boost::tuples::tuple<std::string, int, int> > vの中に、
std::string strと、tupleの先頭の要素が等しいものがあるかどうかを、
std::binary_searchで判定したいのですが、どうbindを使えばいいのか
分かりません。
どなたか教えていただけませんでしょうか。よろしくお願いします。
482(1): 2010/01/16(土) 17:54:09 AAS
>>481
その目的なら比較関数オブジェクトを渡してやればいいと思うけど、
↓みたいなのじゃなくでBoost.Bindを使う意味はあるの?
struct comp {
typedef boost::tuples::tuple<std::string, int, int> tuple_t;
bool operator()(tuple_t const& lhs, tuple_t const& rhs) const {
return lhs.get<0>( ) < rhs.get<0>( );
}
};
483(1): 2010/01/16(土) 18:03:19 AAS
あるいは、binary_searchの比較値にstd::stringを直接渡したいという話?
でもbinary_searchに渡せるのは要素の値と決められてるから、bindに限らずそれは無理だね。
std::binary_search(v.begin( ), v.end( ), tuple_t(str, 0, 0), comp());
こうやるしかない。
484: 2010/01/16(土) 18:11:55 AAS
>>483
そんなの決まってないよ。双方向の operator () が用意されてれば問題ない。
bind じゃ無理そうだけどね。
485: 481 2010/01/16(土) 18:21:55 AAS
>>482 483, 484
ありがとうございました。無理みたいですね。
関数オブジェクトを使うことにします。
486(3): 2010/01/17(日) 17:08:19 AAS
shared_ptrだけが使いたいんだけど
その目的のためにBoostを入れるのは大掛かりすぎる、と思うような人に
良い解決策はありますか?
487: 2010/01/17(日) 17:11:54 AAS
>>486
そういう用途で bcp っていうツールが用意されてるんだけど、
やってみると shared_ptr だけでもけっこうな依存関係になってて、
結局全部そのまま使うことにしたことがある。
488: 2010/01/17(日) 17:14:11 AAS
>>486
Boostを入れるったって、別に全部リンクされるわけじゃないんだから、
普通にBoost入れてshared_ptrだけインクルードするんじゃだめなの?
489: 2010/01/17(日) 17:39:55 AAS
だねえ、オブジェクトファイルも使わないし、
shared_ptr.hppをインクルードして使えば
完成したバイナリは希望通りshared_ptrだけを使ったバイナリになるし。
490: 2010/01/17(日) 17:40:36 AAS
std::tr1::shared_ptrが使える環境にするとか
491: 2010/01/17(日) 17:44:47 AAS
VC++2008ならSP1以降は標準でshared_ptr使えるな
492: 2010/01/17(日) 17:48:33 AAS
俺はstd::tr1::shared_ptrよりもboostの方が信頼できるor同等程度だと思っている。
だがそれはさておきboostの一部分だけ取っていじったのが認められるんなら
boostそのものだって認められるだろ?
やっぱそのままの方が良いと思うんだぜ。
493: 2010/01/17(日) 18:00:35 AAS
チーム内のよくわからん奴が
勝手にshared_ptr以外のライブラリをiincludeするのを避けたいんだろ
494: 2010/01/17(日) 18:07:19 AAS
エスパーすぎる
495: 2010/01/17(日) 18:50:55 AAS
>Boostを入れるのは大掛かりすぎる
自分もboost入れる前はそう思ってた
496(1): 2010/01/17(日) 19:05:31 AAS
そりゃTR1ライブラリよりBoostの方が格段に信頼性は上だろうな
だが世の中には色々な(往々にして訳分からんand/or間違った)理由で「Boostは
ちょっと」って奴もいるからなぁ
他人のコードでバグ出た時ってマジきついしー、みたいに言われた時は、そんなら
標準ライブラリも普通にバグ出るから使うなよって思った
497: 2010/01/17(日) 19:15:41 AAS
そんなこと言ってるやつのコードよりboostの方がよっぽど信用できるわな
498: 2010/01/17(日) 20:17:47 AAS
>>496 単に今までのスタイルを壊されるのが嫌だって理由の連中がいたりするからなあ
そういうのがいると、バージョン管理ソフトさえ入れられない。
499: 2010/01/17(日) 20:37:11 AAS
そういうヤツの会社は潰れるか少なくとも競争には負けるから
心配要らないよ。
500(1): 2010/01/17(日) 21:29:34 AAS
>>486
まず数十行程度の自作スマートポインタから始める。
それで事足りればそれでおしまい。
それじゃ足りないと頭を抱えた時になって初めて確信を持ってshared_ptrを使う。
501(2): 2010/01/18(月) 05:25:49 AAS
shared_ptrだと生に比べてパフォーマンスも下がるし、かなりサイズも大きくなるってのもあるし、
本当に必要かどうかは考えた方が良いのかも。
特にサイズはポインタ1つあたり10倍以上増えるんだっけ?
生ポインタ
参照カウンタ
shared_ptrのvirtual関係
デリータ+virtual
ミューテックス
で。
502: 2010/01/18(月) 06:43:23 AAS
shared_ptrを使わなければ実装できないデータ構造ではそれらのメンバは必須であり
10倍以上という増加も必要な増加だ。
503(2): 2010/01/18(月) 08:18:04 AAS
>>501
それは最悪の場合のサイズでしょ。
virtual関係を共通化したり、atomic操作を使ったり、
実装上の工夫でもっと減らせる。
504: 2010/01/18(月) 08:51:26 AAS
パッと見だとInterlocked系の操作で済ませてるからミューテックスとか要らなくね?
505: 2010/01/18(月) 09:21:34 AAS
shared_ptrのミューテックスはマルチスレッドのためのものじゃない。
506: 2010/01/18(月) 09:23:34 AAS
えっ
507: 2010/01/18(月) 09:30:25 AAS
何に使うの?
508: 2010/01/18(月) 09:46:19 AAS
日本の参政権は日本人のためだけのものじゃない。
509: 2010/01/18(月) 09:48:11 AAS
僕たちは天使じゃない。
510: 2010/01/18(月) 10:07:51 AAS
トムは鉛筆ではない
511: 2010/01/18(月) 13:07:00 AAS
Tom is a pen.
512(1): 2010/01/18(月) 13:15:29 AAS
>>503
そりゃboostのは使わないで自分で作れと言ってるのか?
513: 2010/01/18(月) 13:41:26 AAS
つーかboostのってmutexなんか使ってんの?
514: 2010/01/18(月) 14:40:30 AAS
mutexではなくspinlockになってた
515: 2010/01/18(月) 14:47:02 AAS
atomicなintrinsicが使えるような処理系ならその辺使わないんじゃね?
知らんけど
516: 2010/01/18(月) 15:35:24 AAS
spinlockを使うのは排他中の処理が非常に早く完了するだろうと予測しているから?
517(1): 2010/01/18(月) 16:42:09 AAS
>>500
1 ひとりプロジェクトならスマートポインタは必要ない。
2 協調作業の場合、自作スマートポインタの仕様を説明するのが面倒だからよそのライブラリを使ったほうが説明しやすい
ゆえに自作スマートポインタは必要ない
518: 2010/01/18(月) 16:45:09 AAS
>>517
> 1 ひとりプロジェクトならスマートポインタは必要ない。
いやいやいや。
519: 2010/01/18(月) 16:55:00 AAS
scoped_ptr以外はコード毎最適実装が無限にあるからね
520: 503 2010/01/18(月) 19:32:14 AAS
>>512
誤解させてすまんかった。
boostの環境依存コードにはすでに実装上の工夫がだいぶ入っている。
521(1): 2010/01/18(月) 20:14:11 AAS
>>501
それはどこのshared_ptrですか?
boostのshared_ptrはカウンタクラスにvtableとuse_countとweak_countしかないよ。
アトミック命令でインクリメントするからミューテックスは必要ないし。
522: 2010/01/18(月) 20:23:32 AAS
>>521
アトミックも何も使えない環境だと本当に肥大化するよ。
1.35のsp_counted_base_pt.hppを見てみ。
523(1): 2010/01/18(月) 21:02:05 AAS
シングルスレッド確定なら
#define BOOST_SP_DISABLE_THREADS
という手もある
524: 2010/01/18(月) 21:10:38 AAS
>>523
そんなん初めて知ったわ
525: 2010/01/19(火) 00:05:31 AAS
shared_ptrだけ使いたいって欲求は少しわかるな。
環境や使用できるライブラリが他人に決められてしまう場合とか。
せめてshared_ptrだけの導入なら説得できるんじゃないかとか思ったことがあるw
>>481
find_if()とかでこんなの考えたけど意味が違うか
find_if( v.begin(), v.end(), bind( &tuple<string, int, int>::get<0 _1 ) == str );
binary_search()は思いつかないなあ
526: 2010/01/19(火) 01:03:05 AAS
ライブラリの普及活動ってデリケートだよな、
失敗時に下手すりゃ関連ライブラリにも飛び火するし。
527(1): progress_display 2010/01/20(水) 13:10:13 AAS
まったくですよ
528: 2010/01/20(水) 15:01:57 AAS
>>527
貴方はお引き取りくださいw
529: 2010/01/20(水) 16:37:42 AAS
飛び火するようなアレだっけ?
530: 2010/01/20(水) 16:54:00 BE AAS
progress_displayを見たとき
ああこれは他のプロセスから進捗状況を取得できるAPIも用意されてるんだな。
そうにちがいない。
まさか表示するだけなんてことはあるまい。
531: 2010/01/21(木) 11:44:45 AAS
もう許してやれよ
532: compressed_pai 2010/01/22(金) 20:58:00 AAS
絶対に許さない
533: 2010/01/23(土) 00:59:47 AAS
paiってなんかえろいな
534: [―{}@{}@{}-] 2010/01/23(土) 08:00:23 AAS
貧乳ですねわかります
535: 2010/01/23(土) 08:35:21 AAS
#define compressed_pai 3
536: 2010/01/24(日) 12:58:04 AAS
せめて浮動少数にしてあげて;;
537: 2010/01/24(日) 19:10:44 AAS
compressされてるので無理です。有理だけど。
538: 2010/01/24(日) 19:27:42 AAS
#define compressed_pai (355/113)
539: 2010/01/24(日) 19:28:17 AAS
355.0/113.0
540: 2010/01/24(日) 19:34:26 AAS
そういやこんなスレがあったな。
2chスレ:tech
無限精度実数ライブラリなんだとさ。
これさえあればpiも無限精度でいけるぜ。
・・・いつ使うのかはしらんが、画期的なにおいがある。
541(1): 2010/01/24(日) 21:18:09 AAS
ICUサポートを有効にしたままRegexをstatic-staticでビルドってできないのかな?
ICUをstaticでビルドしてるからRegexもlink=staticでビルドしたい
542: 2010/01/24(日) 21:42:20 AAS
ま、無限精度じゃないしな。
543: 2010/01/24(日) 22:08:45 AAS
>>541
Bjamのソースか関連ファイルを改造しないと無理と思われます。
544: 2010/01/24(日) 22:24:32 AAS
更新しました。
外部リンク:booster.x0.to
以下更新内容の一部
[Spirit]
Spirit: added compile time assertion diagnosing a configuration mismatch
Spirit: working around false static assert on earlier versions of gcc
Spirit: fixing tests for qi::matches[]
Spirit: fixed signed/unsigned mismatch in Qi's binary parsers
Spirit: added spirit::ostream_iterator
Spirit: fixed violation reported by inspect
Spirit: fixing nasty bug in rule copy constructor
Spirit:: adding missing function in multi_pass policies.
Spirit: added specialization for signed char - doh!
[Bimap]
fix missing include headers, ticket #1521
fix count() constness, ticket #2484
[Graph]
Changed to BOOST_THROW_EXCEPTION (except in one test case)
[Math]
Change cbrt implementation to use a better performing algorithm.
Change functions named "check" so they don't conflict with Apple macro of the same name.
[Asio]
Add coroutine::is_complete() and support for "yield break;".
[Type_traits]
Fixes #3704.
[Property_tree]
Fix a weakness in the XML whitespace tests.
This allows me to have correct tests after fixing PR2855, which is also in this commit.
[Python]
Support different MS calling conventions, thanks to Nicolas Lelong. Closes #3833.
[Mpl]
Fix bitand/bitor conflicts with iso64.h header
545: 2010/01/25(月) 01:36:59 AAS
boost.asio で
boost::asio::ip::tcp::socket socket(io_service);
socket << "request" << hoge << "\r\n";
とすれば socket.send(std::string("request") + boost::lexical_cast<std::string>(hoge) + "\r\n");
と同じ事をしてくれるような機能はないのでしょうか
546: 2010/01/25(月) 14:53:21 AAS
boost::iostreams使ってラッパ作るとか
547: 2010/01/25(月) 14:57:15 AAS
boost::asio::ip::tcp::iostreamは既に存在する
548: [―{}@{}@{}-] 2010/01/25(月) 19:05:01 AAS
namespace boost.asio 内に
socket& operator<<(socket&, const std::string& request);
って関数用意するくらいしか思いつかないな
iostreams とか使ってもできそうな気がするけど
549: 2010/01/25(月) 22:13:04 AAS
asioのマニュアル>Examples>HTTP Clientでもお読み
550(1): 2010/01/25(月) 22:41:49 AAS
asioってソケット何個まで同時に開けますか?
551: 2010/01/29(金) 12:06:43 AAS
boostの使い方じゃなくて実装を中心に解説してる本ってあるの?
552(1): 2010/01/29(金) 22:13:17 AAS
>>550
OSの制限まで使えると思う。Asio自体には特に制限はないのでは?
553: 2010/01/29(金) 23:22:17 AAS
あっしお(あっそ)
554(1): 2010/01/30(土) 00:28:44 AAS
>>552
じゃWinの場合は1スレッド32個までなのかな。
555: 2010/01/30(土) 03:11:51 AAS
>>554
WaitForMultipleObjectsの制限で64個のほかに何かあるの?
556(1): 2010/02/03(水) 20:34:31 AAS
1.42.0
557: 2010/02/06(土) 23:11:24 AAS
>>556
祝age
558: 2010/02/06(土) 23:38:54 AAS
えー・・・
昨日1.41.0入れたばかりなのに
ちなみにその前日まで1.38使ってました
559: 2010/02/07(日) 00:34:45 AAS
ちょっと教えて欲しい。
C言語の getopt(argc, argv, "o::")
$ command -oarg <- arg は-oの引数
$ command -o arg <- arg は-oの引数とみなさない
を boost::program_options で実現するにはどうしたらいい?
desc.add_options()("option,o", value<std::string>()->implicit_value(""), "desc")
でいけそうな気もするけど
1.33.1 縛りなので implicit_value が無いらしい(´・ω・`)
560(1): 2010/02/07(日) 15:55:40 AAS
program.optionsは1.42でも更新されてるから最新で試してみれば?悩むのはそれからでもいいんじゃね?
561(1): 2010/02/07(日) 22:17:07 AAS
>>560
とりあえず使える状態だった1.41.0で
implicit_valueを試してみたけどダメみたいだね。
次のargvを引数にするみたい(´・ω・`)
562(2): 2010/02/07(日) 22:20:18 AAS
program_optionsは、以前試したら、
unicode対応の意味を分かってないクソ設計だった。
正直、progress_displayと同レベル。
563(1): 2010/02/07(日) 22:35:40 AAS
program_optionsはもうちょっと何とかならないのかな。あとspirit。
定番用途なのにもったいない。
progress_displayは別にいいや。
564(1): 2010/02/07(日) 22:51:05 AAS
>>563
Boost.Spiritはv2になってコンパイル速度が遅く
なったのが痛いな。
とはいえCPUがこれから先 さらに進歩すれば十分使えるようになるだろう。
・・・たぶん。
program_optionsはそもそも事前にビルドしておかないといけないってのが
難点というか、俺はそれで使ったことない。
progress_displayは・・・まあ別にいいや。
rootでなくてどっかのディレクトリに入って欲しいなぁってくらい。
565: 2010/02/07(日) 23:01:06 AAS
更新しました。trunkはまだ1.42のままです。
外部リンク:booster.x0.to
以下更新内容の一部
[Exeption]
improved memory leak test.
[Math]
Improve the performance of the Bessel functions, and update docs.
[Fusion]
Fusion: adding overload for const parameter types
Fusion: fixed adapt_class to be usable with Spirit, added adapt_class_named
[Spirit]
Complete Unicode Level-1 support: table generation.
Spirit: adding workaround for MSVC falsly trzing to use multi_pass::operator== for other iterators
Spirit: buffer[buffer[...]] does not result in double buffering anymore, added tests
[Property_tree]
Fix an issue in MSVC for ptree::equal_range.
566: 2010/02/07(日) 23:01:47 AAS
[Regex]
Improve regex performance on msvc by removing statically allocated recursion stack, and using a std::vector instead.
[Program_options]
fix in winmain, Fixes #3879
[Serialization]
Added comment regarding intentional anonymous namespace in header
[Statechart]
simple_state::context() now also finds bases of state types.
[Uuid]
switch from the Boost Test Library to boost/detail/lightweight_test.hpp
moved uuid generators into their own file
[Wave]
Wave: added found_unknown_directive preprocessing hook, bumped version number
亦、libs_for_build_boost.rarもICUを4.3.4にアップデート致しました。
567(1): 2010/02/07(日) 23:07:56 AAS
boost/exception.hpp が使えなくなってるぅぅぅるうううるるううーorz
boost/exception/all.hpp を使えだってさ
568: 2010/02/08(月) 00:35:02 AAS
>>567
さすがにこの変更はないわ
boost/exception.hppでall.hppをincludeしてくれたらよかったのに
569: 2010/02/08(月) 10:08:38 AAS
>>562
海外製のライブラリはそんなのが多いような気がする。
VisualStudio限定の話になるけど、文字セットを「Unicode文字セットを使用する」に設定するとおかしくなる感じで。
570: 2010/02/08(月) 10:22:46 AAS
boost::exceptionは破壊的変更やりすぎ
もっと練ってから入れて欲しかった
571: 2010/02/08(月) 20:05:03 AAS
何も考えずにall.hppに変更してたんだけど、そんなことになってたのか。
spiritに続いてこの仕打ちは酷いよ。
572: 564 2010/02/08(月) 21:31:20 AAS
boost::exceptionも使ったことないから分からん。
やっぱboostに入るぐらいだから便利なんだろうか。
紹介を見てもそんな例外をばりばりに使用しないしって思っちゃう。。。
573: 2010/02/08(月) 22:52:17 AAS
例外でエラー通知する場合は便利じゃない
574: 2010/02/09(火) 05:19:46 AAS
Boost 1.42
shared_ptr<string>がBoost.Serializationでシリアライズできない。
STATIC_ASSERTにひっかかる。
575: 2010/02/09(火) 14:04:38 AAS
>>561
結局、command_line_parserに渡す前に自前で処理しました。
GNU拡張とはいえgetoptにできることぐらいはできないと困るね(´・ω・`)
576: 2010/02/09(火) 14:05:14 AAS
shared_ptr まだシリアライズできないバグがあるのかw
何やってんだw
577(2): 2010/02/09(火) 19:16:31 AAS
Boost.Serializationって
どんなときに使うのでさ?
578(1): 2010/02/09(火) 19:18:30 AAS
データを直列化し総サイズを算出して現在進行しているアルゴリズムの進捗状況と照らし合わせて
progress_displayに情報を渡す。
579: [―{}@{}@{}-] 2010/02/09(火) 19:35:36 AAS
1.41と1.42は本当にちゃんとテストしているのだろうか
580: 2010/02/09(火) 20:29:12 AAS
>>578
progress_displayすげー。
581(1): 2010/02/10(水) 09:49:53 AAS
>>577
処理状態をファイルか何かに保存したりしたい時
例えばゲームのセーブロードとか、CGIのセッション保存とか
582(1): 2010/02/11(木) 06:09:02 AAS
設定の保存と読み込みによく使ってるわ
iniとか使う気になれんし
583: 577 2010/02/11(木) 11:47:05 AAS
>>581-582
ありがとう。
なるほど。途中状態の記録とかに便利なのか。。。
584(1): 2010/02/11(木) 18:53:45 AAS
今までBoost無しでスタティックライブラリ開発してたんだけどもうBoost入れるわ・・・
でもさ,Boostに依存しまくったライブラリとかみんな使ってくれるかな・・・
585: 2010/02/11(木) 19:11:18 BE AAS
Boostを入れなくても使えるようにすればいいんじゃないか?
586: 2010/02/11(木) 19:26:29 AAS
そうか分離出来るかわからないけどヘッダにboostに依存する型が入らないようにしてみる
自力ビルドしたい人とかサポート外環境の人には諦めてboost入れてもらうことにしよう・・・
587: 2010/02/11(木) 21:56:16 AAS
矢沢「え?せっかくのC++なのにBoostついてないの・・?・・・・・それはもったいない・・」
588(1): 2010/02/11(木) 23:33:38 AAS
STLでさえ禁止のところあるからなぁ・・・
Qtはおすすめ
589: 2010/02/12(金) 00:19:46 AAS
>>584
依存しまくったライブラリでも有用性があるならおkでしょう。
ただしそのライブラリが複数あるなら、依存しないでかけるライブラリは
その方が良いのかもしれんけど。
590: 2010/02/12(金) 00:24:33 AAS
>>588
> STLでさえ禁止のところあるからなぁ・・・
別にそんな会社は潰れちまえばいいだけだろ。
・・・え?ウチの会社・・・?
591: 2010/02/12(金) 00:34:20 AAS
テンプレートが使えるだけありがたく思え
592(1): 2010/02/12(金) 05:18:35 AAS
Boost使えなす(´;ω;`)
↑STLが使えるだけマシだろ
↑テンプレート使えるだけマシだろ
593: 2010/02/12(金) 06:18:03 AAS
>>592
この板の「職場で使わせて貰えない」系の嘆きも、そういう順で変化してってるよね。
俺が最初にこの板来た頃はテンプレートで、次にSTLになって、今はBoost。
「C++0x使わせてもらえない」も来るかな。autoくらい使わせてくれよ的な。
594: 2010/02/12(金) 08:30:16 AAS
Boost使えなす(´;ω;`)
↑STLが使えるだけマシだろ
↑テンプレート使えるだけマシだろ
↑C++使えるだけマシだろ
↑C使えるだけマシだろ
↑アセンブラ使えるだけマシだろ
595: 2010/02/12(金) 08:33:03 AAS
さすがに意味がわからん
596(2): 2010/02/12(金) 09:30:18 AAS
boostの正規表現機能を使いたいのですがあれって性的リンクだそうですが
ライセンスとかどうなんでしょう?
597: 2010/02/12(金) 09:39:48 AAS
性的リンク
ハアハア
598: 2010/02/12(金) 10:20:21 AAS
boostライセンスは凄く緩いんで気にすることは無いよ
boostライセンスの条文のコピーとboost使ってますっていう記述を
readmeにでも書いてればおk
599: 2010/02/12(金) 10:28:39 AAS
そんな事しなくてもソースコード中(公開しなくてもいい)に
boostのライセンスのせときゃいいよ
600: 2010/02/12(金) 11:15:05 AAS
静的リンクが問題になるライセンスってたとえば何だ?
601: 2010/02/12(金) 11:16:12 AAS
LGPL
602(1): 2010/02/12(金) 11:31:30 AAS
いうと思った。
それは問題にならない。
LGPLはオブジェクトコードがどういうものかというのを定めてはいない。
動的リンクだろうと静的リンクだろうと、それはLGPLの定義の範囲外にある。
LGPLでは、ソースコードとして、どのように使っているかが問題になる。
上下前次1-新書関写板覧索設栞歴
あと 399 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.505s*