SophiaFramework 3.0 − RSS, POP/SMTP, vCalendar −

コードは綺麗で読みやすいSophiaFramework は、高品質な BREW アプリが、 C++ 言語で短期間に簡単に開発できる、便利なミドルウェアです。
最新バージョン SophiaFramework 3.0 では、スピードやサイズ、API の最適化を目的とした再設計と再実装が施されています。
※SophiaFramework 3.0 無料評価版には、RSS リーダー、POP / SMTP メーラー、vCalendar スケジューラー、TabBrowser、文字認識など、実用的な BREW アプリのソースコードも付属しています。
SophiaFramework 3.0 : 主な変更点
1. 新しいクラスと関数
- POP3 / SMTP 対応メールクラス
- テンプレートをサポートするコレクションクラス
- ブロックアロケーションをサポートするヒープ管理クラス
- MT法や線形合同法に対応した乱数クラス
- 日付クラス
- DNS 解決クラス
- ARM 組込みライブラリを利用可能にする関数
- その他多数
2. 既存ライブラリの改良
- コードサイズと実行速度
- APIラインナップ
- シミュレーター上でのメモリの確保・解放追跡機能
3. BREW 3.1 に対応
4. Visual Studio.NET とRealView Compilation Tools for BREW に対応
5. インストーラによるセットアップ
処理速度の向上
SophiaFramework Ver.3.0 では文字列処理速度が大幅に向上しました。
ベンチマーク・プログラムで測定したところ,文字列の検索で5.45倍、文字列の置換で5.97倍、文字列への他の文字列の追加で253倍もの高速化が確認できました。
ここでは文字列クラスを取りあげ、具体的にどれだけ速度が向上しているかをご紹介します。
文字列の検索
効率化により時間が短縮されています。
測定結果
平均5.45倍高速化
| 旧Ver.2.2 | 新Ver.3.0 |
|---|---|
| 7019 | 1281 |
| 6998 | 1299 |
| 7008 | 1280 |
| average = 7008 | average = 1286 |
(単位: ms)
測定方法
長い文字列から"SophiaFramework3.0"の文字列が何番目にあるかを検索
void func2() {
int i, j, sum, temp;
SFXAnsiString str; // 旧バージョンではSFUAnsiString
sum = 0;
for (i = 0; i < 10000; i++) { // 文字列の準備
(abcabc... と続く文字列を用意し、
途中 に "SophiaFramework3.0" の文字列を挿入したものを用意)
if (i == 5000) str += "SophiaFramework3.0";
else str += "abc";
}
for (i = 0; i < 3; i++) { // 3回計測
int startms = GETTIMEMS(); //計測開始
for (j = 0; j < 100; j++) { // 100回実行
//文字列の検索(何文字目にあるか)
temp += str.IndexOf("SophiaFramework3.0");
}
int endms = GETTIMEMS(); //計測終了
DBGPRINTF("%d %d", endms - startms, temp);
sum += endms - startms;
}
DBGPRINTF("average = %d", sum / 3);
}
文字列の置き換え
効率化により時間が短縮されています。
計測結果
平均5.97倍高速化
| 旧Ver.2.2 | 新Ver.3.0 |
|---|---|
| 3741 | 626 |
| 3741 | 626 |
| 3724 | 626 |
| average = 3735 | average = 626 |
(単位: ms)
測定方法
長い文字列から"SophiaFramework2.2"の文字列を見つけ出し、"SophiaFramework3.0"に置換
void func3() {
int i, j, sum;
SFXAnsiString str; // 旧バージョンではSFUAnsiString
SFXAnsiString temp_str;
sum = 0;
for (i = 0; i < 10000; i++) { // 文字列の準備
if (i == 5000) str += "SophiaFramework2.2";
else str += "abc";
}
for (i = 0; i < 3; i++) { // 3回計測
int startms = GETTIMEMS(); //計測開始
for (j = 0; j < 10; j++) { // 10回実行
temp_str = str.Replace("SophiaFramework2.2",
"SophiaFramework3.0"); //文字列の置換
}
int endms = GETTIMEMS(); //計測終了
DBGPRINTF("%d %d", endms - startms, temp_str.Length());
sum += endms - startms;
}
DBGPRINTF("average = %d", sum / 3);
}
文字列の追加
従来バージョンでは文字列の追加のたびに新しいインスタンスを生成したため、大幅な時間のロスとなっていました。SophiaFramework Ver.3.0 ではこのようなロスをなくし、処理が高速化されました。
ネットワーク通信で受信した文字列を今ある文字列に次々に追加していく場合、以下のようなコードが出てきます。
計測結果
平均253倍高速化
* 旧Ver.2.2 では文字列を追加するたびに遅くなっていますが、新Ver.3.0 では文字列が長くなっても文字列の追加は遅くなりません
| 旧Ver.2.2 | 新Ver.3.0 |
|---|---|
| 246 | 10 |
| 691 | 11 |
| 1161 | 10 |
| 1698 | 10 |
| 2269 | 10 |
| 2802 | 10 |
| 3348 | 10 |
| 3849 | 11 |
| 4364 | 10 |
| 4909 | 10 |
| average = 2533 | average = 10 |
(単位: ms)
測定方法
文字列 str に繰り返し "abcdef" 文字列 を追加していく
void func1() {
int i, j, sum;
SFXAnsiString str; // 旧バージョンではSFUAnsiString
sum = 0;
for (i = 0; i < 10; i++) { // 10回計測
int startms = GETTIMEMS(); //計測開始
for (j = 0; j < 1000; j++) { // 1000回実行
str += "abcdef"; //文字列の追加(今までの文字列の後ろに"abcdef"を追加)
}
int endms = GETTIMEMS(); //計測終了
DBGPRINTF("%d", endms - startms);
sum += endms - startms;
}
DBGPRINTF("average = %d", sum / 10);
}
BREWへの移植をサポート
この技術は、「SophiaFramework」に含まれるARM組込標準関数を利用可能にする関数の提供と付属開発補助ツール「svHacker」から構成されます。
PDA などのアプリケーションを BREW に移植する方法

開発背景
Palm や PocketPC などの PDA 、ソニーの PSP、アップルの iPod、任天堂の Nintendo DS のプロセッサには BREWが搭載された携帯電話と同じ ARM 社プロセッサが搭載されいます。したがって、これらの携帯端末から BREW への移植は容易なはずですが、BREWではC言語の大域変数と浮動小数演算などのARM組込標準関数を利用することができず、大きな障害となっていました。
そこで、BREW の仕様を超えてC言語の大域変数を利用可能にするツール「svHacker」と 標準的浮動小数点演算を利用できる関数を提供し、BREWへ移植のを支援します。
浮動小数点演算使用方法
SophiaFramework では Float32, Float64 型を使うことで通常の float, double と同じように浮動小数点を扱うことができます。
[BREW API のみを使用したコード]
// 浮動小数点型の値を整数型の値に変換します。
#define SIZE 64
double doubleVal = -1.234;
int intVal = 0;
char charStr[SIZE] = {0};
AECHAR aecharStr[SIZE] = {0};
// double 型の数値をワイド文字列に変換します。
boolean b = FLOATTOWSTR(doubleVal, aecharStr, SIZE);
// ワイド文字列を char 文字列に変換します。
WSTRTOSTR(aecharStr, charStr, SIZE);
// char 文字列を int 型の数値に変換します。
intVal = ATOI(charStr);
[SophiaFramework を使用したコード]
// 浮動小数点型の値を整数型の値に変換します。 Float64 doubleVal(-1.234); SInt32 intVal = (SInt32)doubleVal;
svHacker 〜 BREW で大域変数や静的変数が使用できるツール 〜
*現在 svHacker は SophiaFramework または SophiaCompress(BREW) をご購入のお客様に無償提供しています。
svHacker の機能
BREW では仕様上、大域変数(グローバル変数)や静的変数(static変数)を使用することができません。
本ツールを利用すると、コンパイル後の mod ファイルを操作することにより、これらの変数を使用できるようにパッチを当てることができます。これにより、大域変数を使用したプログラムやライブラリの BREW への移植作業を大幅に簡略化することができます。
対応 SDK バージョン
BREW 2.1 / 3.1 の実機端末において動作確認を行っております。
svHacker の使い方
コンパイルオプションの変更を行うために、アプリケーションのコンパイル前に svHacker を利用してメイクファイルを書き換えます。この作業はメイクファイルを作成した後に一度だけ行います。
その後、コンパイルを行い、再度 svHacker を利用し大域変数や静的変数を使用できるようにmodファイルを書き換えます。
[ svHacker の操作画面 ]

詳細についてはソフトウェア付属のドキュメントを参照ください。
動作環境
Windows 環境 Windows XP Professional / Windows 2000 Professional (SP4)
BREW 環境 BREW SDK 2.0.1J / 2.1.1J / 3.1.2J
サポートについて
ソフィア・クレイドルは本ソフトウェアの使用または使用不能に関する、サポートを一切実施いたしません。
また、本ソフトウェアの使用によるいかなる障害や問題に対しても、一切の責任を負いません。
* 詳細はパッケージに付属する使用許諾書をご覧ください。













