2006-01-01から1ヶ月間の記事一覧

boost::filesystem::pathの改造

Windowsの場合、UTF-8でパス名を持つように書き換えてみた。 http://www89.sakura.ne.jp/~janus/distribution/boost_filesystem_utf8.zip path_posix_windows.cppのほうは書き換えた位置をアスタリスク連打コメントで囲ってあるので、気になる方は検索しなが…

まだ冬の範疇か

なんだか最近午後3時くらいになると猛烈に眠くなる。その眠気が終日続くのであまり作業もはかどらない。春眠暁を覚えずっていう時節でもなかろうに、どうにかならないものかと思いつつ、惰眠をむさぼることにする。

ちょっと考える

とりあえずboost::filesystemにUTF-8を突っ込んで、ファイル操作を行う段階で処理系デフォルト文字コードに変換しなおす、という方向で問題ないようだが、operation.hppに定義されているファイル操作関数を使えないのはイタイので、m_path_append()でUTF-8エ…

あまりかんばしくない

boost::filesytem::pathにUTF-8文字列を突っ込もうと考えたやぬすさん。UTF-8関連の変換関数をガリゴリと書いて、いざテスツ!という段階になってUTF-8ではファイルオープンとか出来ないことに気付いた(こうなるとmblen()あたりでマルチバイト列を調べながら読…

_cplusplusという罠

C++としてソースファイルをコンパイルする際、__cplusplusが定義済みマクロとして定義されているわけだが。C/C++リファレンスの定義済みマクロのページを信用して、というか_cplusplusの部分をコピペして #ifdef _cplusplus // 正確には __cplusplus extern …

UTF-8

文字コードについて悩むのをやめて、ゴリゴリとコーディングすることにした。UTF-8のmanpageとRFC3629日本語訳を参考にしてUCS-4-->UTF-8へのエンコーディングルーチン。 /* 一文字のUCS-4をUTF-8オクテット列にエンコードする */ size_t ucs4_to_utf8(char * …

ライブラリの国際化について

Unicodeの助けを借りるのが現実的かつ常識的。とりあえず思いつきそうなアプローチは、 文字列の内部表現はワイド文字、入出力はマルチバイト文字 内部表現・入出力ともにマルチバイト文字 の2点。内部表現にワイド文字を使う場合、2byteしか割いていない処…

マルチバイト文字列のstrlen()

昨日言ってたマルチバイト文字列の長さをはかる方法、mblen()を使えば簡単に出来た。っていうかmbなんたら系の関数っていつのまにC標準に?(ぉ int mbstrlen(const char * src) { unsigned length = 0; /* 返り値となるlength */ const char * psrc = src; /…

内部表現はワイド文字

内部表現をワイド文字で、入出力をマルチバイト文字で行うための関数を定義してみた。長いけどほとんどコメントなので勘弁。 #include <cstdlib> #include <cassert> #include <string> #include <vector> #include <iostream> #include <locale> #include <stdexcept> #ifdef _MSC_VER #define NS_STD #else #define NS_STD </stdexcept></locale></iostream></vector></string></cassert></cstdlib>…

コンパイラごとの違い

コンパイラごとに定義されているシンボルを#ifdef等で調べて、個別にコードを書いていけばいい。ここで言ってる「コンパイラごとに定義されているシンボル」に関しては、 boost/config/select_compiler_config.hppで調べる boost/config/select_compiler_con…

文字コード雑感

真にワールドワイドな、移植性のあるプログラムを書く、というとUCS-4あたりにHan Unificationなんかせずに世界の全文字を詰め込んで、ラテン文字だろうと漢字だろうと4byteで済ませましょう、っつーのが平等かつ簡単だと思う。文字には文化も含まれているわ…

C++でワイド文字

ワイド文字 マルチバイト文字 ワイド文字を扱うための道具 ワイド文字マルチバイト文字変換のための関数・API。 C標準 stdlib.h mbtowc() wctomb() mbstowcs() wcstombs() wchar.h mbrtowc() wcrtomb() mbsrtowcs() wcsrtombs() Windows API MultiByteToWide…

Unicode

dev

調べていたらこんがらがってきたのでまとめ。 Unicode Home Page 使いこなそうユニコード Unicode : The universal character encoding (昔は)16bitに全ての文字を詰め込もうとした文字集合。当然65536字に全世界の文字が収まるはずはないのでHan Unificatio…

英雄伝説 空の軌跡SC

今更ながら空の軌跡SCの情報を仕入れてきた。ついでに予告ムービーも見た。いやー、盛り上げ方半端じゃないね。こういう王道ものって最近じゃあまり見ないからいざ始めちゃうと真面目にやっちゃうんだよな(笑。飛空艇での空戦シーンがLast Exileに似てるとか…

例外

例外って使ってみるのに勇気がいる、気がする。一回例外が投げられると、自分の書いた処理を全てすっ飛ばしてどこかへ飛んでいってしまう気がするからだ。実際に発生する可能性のあるところをtry-catchブロックで囲ってやらないと本当に彼方へ飛んでいってし…

name_check function補足

この項はかなり実装に拠った話しなので次バージョンで状況が変わることもある。あくまでもnativeの意味をはかるというコンテクストで読んでもらいたい。細かく説明するとname_checkは基本的にファイル名のみのチェックをするものとして定義されている。具体…

boost::filesystemと日本語

boost::filesystemはワイド文字が扱えないと書いたのと連動して、今回は日本語に限ったオハナシ。 文字コード C++でプログラミングする際の話しなので必然的に文字コードについての知識が必要、ということになるんだが、とりあえず、 日本語と文字コード 文…

文章を書くリハビリ

ていうか↑の文章支離滅裂だな。一応自分の思考をまとめるためのメモとして書いてみたんだけど、久しぶりにこういうことすると上手くいかないね(ぉ。そもそも何を言いたいのかわかんないしorzまぁ焦んないでやってみましょー。

スレッドセーフティな時間

同期を取るタイミングがどうとかいう話しではなくて。以前Windowsの標準C++ライブラリではctimeがincludeされる名前空間が間違っている、と書いたけれども、それをさしおいてもWindowsで時間を扱うプログラムをする場合はAPIを使ったほうがいいという根拠を…

boost::filesystemとワイド文字 その2

以前boost::filesystemがどんな挙動をするか試すために、ディレクトリを再帰的に探査していってディレクトリ・ファイル名を表示するというプログラムを書いたんだが、それが0x5c問題をスルーしていることに気付いた。ソースは以下。 #include <boost/filesystem/path.hpp> #include <boost/filesystem/operations.hpp> #in</boost/filesystem/operations.hpp></boost/filesystem/path.hpp>…

boost::filesystemとワイド文字

boost::filesystemでまたも引っかかる点が。端的に言ってしまえばboost::filesystemではワイド文字を扱えない、ってことなんだけどその説明がFAQに以下のように載っていたので引用。 Wide-character names would provide an illusion of portability where p…

デザインいじり

以前さくらさんとこでも緑と葉っぱというイメージでデザインしていたので、とりあえずhatena-leafをテーマに選んだわけだけども。こいつ幅狭いしpre要素で幅を超過するとサイドバーの流し込みが失敗するしでちょっと扱いにくかったので、ちょこちょことcssい…

コンストラクタでの例外送出

コンストラクタ内で例外を送出する危険性についてざっと調べてみたところ、 C MAGAZINE プログラミングの禁じ手Web版 C++編 - 例外に関するパターン cppll:3217 コンストラクタについて の二つが大体のところだと思うんだが、どっちも空間的資源についてしか…

さくらさん

もとのさくらさんとこで晒してたモノをほとんど削除して掲示板とこっちへのリンクのみにした。んでまぁ現状の生活だと別にディスクスペースが必要ってわけではないし、残した掲示板も数週間に一度書き込まれるペースなのでかなり無駄。でも引き払うにしても…

ctime

C++版time.h。というかほとんどの実装ではctimeヘッダファイル内でtime.hをstd名前空間内にincludeしている。ハズなのだが、VC++6.0では何故かstd名前空間ではなくグローバル名前空間にincludeされている。(最新のMicrosoft Platform SDKでもグローバル名前…

とりあえずはじめてみた

イマドキ日記やメモを掲示板(しかも自前で作ったショボイやつ)に投稿する生活はどうなのよ?ということではてなさんをはじめてみた。ざっと使い方見てみたんだが、 htmlベース Wikiベース?(ハイフンでulとか) Texベース で文章が書けるのね。上二つはともか…