この記事を読む人はカナリ少ないです。 今読んでいる「あなた」、もしかすると「あなた」だけかもしれません。 .. そんな、「あなた」だけがための今回の課題は、「ヒープに収まらないテキストを編集したい」です!! [課題]ヒープに収まらないテキストを編集したい KyoroTextはでっかいデータをノータイムで表示できる事を実現したアプリです。 なので、KyoroTextで編集するデータはヒープに収まらないデータとなります。 ヒープに収まらないデータの一部を変更/編集したい場合、どうすればよいでしょうか? KyoroTextでとった方法を解説します。 [作戦] パパパッと思いついた作戦は、以下の2つです。 -a 変更したところだけ記録する。 -b 内部ストレージを、ヒープであるかのように使用する。適当にキャッシュして、ストレスなく扱えるように調整する。 「-a」を実現するLogicは直ぐに思いついたのですが、「-b」を、実現するLogicは直ぐに思いつきませんでした。また、応答速度の最悪値が、良く無い場合には、うまく同期させる機能が必要になるかもしれません。 とりあえず、簡単に実現できそうな、「-a」を実装することにしました。 [変更点だけ記録する方法] KyoroTextで採用したデータ構造はかなり単純です。 以下のような情報を持ったデータをListに記録しているだけです。 -「N行目にデーターを追加した」 -「N行目のデーターを削除した」 「テスト」と「UNDO/REDOの実装」が簡単になるように、「追加」「削除」の2つだけにしました。これだけで、編集前と変種後の差分を全て表現できます。例えば、「特定の行のテキストを置換する場合」には、以下のような感じで表せます。 1. 置換する行を削除する。 2. 置換した後のテキストを、削除した行に追加する。 これならば、簡単に実現できそうですね!! 具体的には、以下のような感じになりました。 改善の余地はかなりある。 https://github.com/kyorohiro/KyoroHelloAndroid/tree/master/KyoroCommon/src/info/kyorohiro/helloworld/display/widget/editview/differ https://github.com/kyorohiro/KyoroHelloAndroid/tree/master/TestForKyoroCommon/src/info/kyorohiro/helloworld/display/widget/editview/differ [次回のネタ] このブログに来る人は、特定のキーワード(APIとかフレームワーク名だとか)をGoogleした人がほとんどみたいです。より多くの人の目にとまるように、特定のキーワードが使って何か書く予定です。 - SurfaceView上で、InputConnactionを使った簡単なサンプル - Robotiumを使った簡単なサンプル - JavaのC#への変換ついて、特定のツールの使い方 - .. - .
2012年12月24日月曜日
KyoroText で使用されている技術 その6
登録:
コメントの投稿 (Atom)
mbedtls dart の 開発を始めた web wasm ffi io flutter
C言語 で開発した機能を、Dart をターゲットとして、Web でも サーバーでも、そして Flutter でも使えるようにしたい。 そこで、mbedtls の 暗号化の部分を Dart 向けのPackageを作りながら、 実現方法を試行錯誤する事にした。 dart...
-
[課題] Low Memory Killer を意図的に発生させたい Androidには、ヒープが涸渇すると使われていないアプリをKillする機能があります。 この記事では、意図的にヒープを枯渇させて、この状態をつくる方法について説明します。 単純にヒープを大...
-
UPnPを用いて、NAT越えできました。しかし、ルータがUPnPをサポートしていなかったり。UPnPだけでは越えられないNATがあります。 本文では、その代案として前回解説できなかった。「適当なサーバーに接続してみて、相手から見えているアドレスを返してもらう方法」について解...
-
Dart の Native Extensions を利用して、 SDL を用いたマルチプラットフォームのゲーム開発環境を作れるか検証してみた。 結論からいくと、 「Mac 上で動作する SDL x Dart の アプリは動作させることが難しいよ」 と言うことです。 Wind...
0 件のコメント:
コメントを投稿