Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Goでテキストエディタを作った話@GDG Devfest2020

arakawa
October 17, 2020

Goでテキストエディタを作った話@GDG Devfest2020

arakawa

October 17, 2020
Tweet

More Decks by arakawa

Other Decks in Programming

Transcript

  1. H
 e
 l
 l
 o
 ,
 W
 o
 r
 l


    d
 !
 ‘!’を挿入
 文字入力の動き 

  2. H
 e
 l
 ,
 W
 o
 r
 l
 d
 !


    ’lo’を入力し忘れた!
 もし入力ミスが起きたときに... 

  3. 配列の場合
 H
 e
 l
 ,
 ,
 W
 o
 r
 l


    d
 !
 O(n)操作が発生!
 挿入処理のためにずらす必要がある 

  4. 配列の場合
 H
 e
 l
 l
 ,
 W
 o
 r
 l


    d
 !
 O(n)操作が発生!(二回目)

  5. 配列の場合
 H
 e
 l
 l
 o
 ,
 W
 o
 r


    l
 d
 !
 挿入操作が走るたびにO(n)発生する

  6. GapBuffer
 H
 e
 l
 ,
 W
 o
 r
 l
 d


    !
 ’lo’を入力し忘れた!

  7. GapBuffer
 H
 e
 l
 ,
 W
 ,
 W
 o
 r


    l
 d
 !
 挿入位置以降の文字列を後方に移す 

  8. GapBuffer
 H
 e
 l
 ,
 W
 ,
 W
 o
 r


    l
 d
 !
 O(n)操作が発生!
 挿入位置以降の文字列を後方に移す 

  9. GapBuffer
 H
 e
 l
 l
 o
 ,
 W
 o
 r


    l
 d
 !
 ‘o’を挿入
 O(1)で挿入可能!

  10. GapBuffer - データ構造
 H
 e
 l
 l
 o
 ,
 W


    o
 r
 l
 d
 !
 array
 startPieceIndex
 endPieceIndex
 https://github.com/ad-sho-loko/mille/blob/master/gap_table.go