User Tag List

Страница 10 из 13 ПерваяПервая ... 678910111213 ПоследняяПоследняя
Показано с 91 по 100 из 124

Тема: Как организовать память для текстового редактора?

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,286
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    39 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от vinxru Посмотреть сообщение
    Это не проблема. Перед сохранением, перемещаем курсор в конец текста. Это один вызов уже существующей в редакторе функции. Это объединяет текст в один блок.
    Но ведь это уже обработка. Конечно, ее можно минимизировать, вычислив оптимальную сторону куда прыгать (в начало или в конец), но в общем случае она есть.

    Цитата Сообщение от vinxru Посмотреть сообщение
    Эти способы по любому проще сохранения из кучи.
    Понятное дело.

    Кстати, была мысль при укорачивании строк не уплотнять весь текст, а оставлять окно, пометив его какими-нибудь кодами. Потом при поиске свободного места можно в обе стороны бегать уплотняя построчно.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    ZEK
    Гость

    По умолчанию

    Цитата Сообщение от Vitamin Посмотреть сообщение
    Но ведь это уже обработка.
    Пипец задрот, одно дело из кучи собирать в буфер и записывать (а каждый очередной кусок может выходить за пределы буфера и это дополнительный танец), то ли переместить курсор в хвост, и сохранить одним куском

  4. #3

    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,286
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    39 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZEK Посмотреть сообщение
    Пипец задрот, одно дело из кучи собирать в буфер и записывать (а каждый очередной кусок может выходить за пределы буфера и это дополнительный танец), то ли переместить курсор в хвост, и сохранить одним куском
    Пипец умнюк, одно дело собирать из двух кусков, другое дело одним куском записать и не париться.

    Для неврубающихся: лично я хранение текста построчно в куче даже и не рассматриваю.

  5. #4
    ZEK
    Гость

    По умолчанию

    Цитата Сообщение от Vitamin Посмотреть сообщение
    одно дело собирать из двух кусков
    собрать это написать процедурину?

  6. #5

    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,286
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    39 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZEK Посмотреть сообщение
    собрать это написать процедурину?
    Нет. Выполнить некую процедуру по преобразованию текста из внутреннего формата в пригодный для последовательного сохранения на блочном носителе.

    Если ты говоришь о необходимости писать специальный код для этого преобразования, то ситуация следующая.
    Для классического варианта преобразования не требуется.
    В альтернативных вариантах преобразование делается имеющимся функционалом. Для хранения текста в виде двух частей- временным переходом на границу текста, для хранения текста в куче- последовательным проходом. Эта функциональность тоже необходима (хотя бы для навигации по тексту).
    То, что второй вариант на порядок сложнее- и ежу понятно.

  7. #6
    ZEK
    Гость

    По умолчанию

    То есть делаем вывод, различие вариантов когда текст уже плоский и вариант когда он состоит из двух кусков состоит из вызова из одной процедуры, следовательно как критерий упрощения записи вариант с плоских хранением очень сомнителен, выигрыш в длительности операции записи, но на фоне операций IO это не заметно, и тут стоит склоняться к варианту где работа в типовых операциях менее накладная и отзывчивая со стороны UI

  8. #7

    Регистрация
    03.01.2006
    Адрес
    Рязань
    Сообщений
    2,935
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vitamin Посмотреть сообщение
    С учетом того, что разделение делается в произвольном месте, а ввод-вывод у нас блочный, над стыком таки потребуется дополнительная обработка. И она будет сложнее, если свободное окно между кусками меньше размера блока. Я в чем-то ошибся? Если да, то в чем?
    В худшем случае копируется 255=размер_блока-1 байт (если окно меньше, то два раза). Кстати, никто не заставляет сохранять, если свободное окно между кусками меньше размера блока. Например, ACEdit может редактировать 65535 байт, но он не сохранит, если больше 65280.

  9. #8

    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,286
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    39 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ZEK Посмотреть сообщение
    и тут стоит склоняться к варианту где работа в типовых операциях менее накладная и отзывчивая со стороны UI
    А тут уже расходятся мнения что считать "типовой операцией"- навигацию или редактирование.

    Вот накидал оценки затрат:
    M - размер текста
    N- средний размер строки
    K- размер экрана в строках

    Учтены разумные оптимизации (например, известный конец текста).
    Код:
           \Метод| Plain | Twopart | Fragmented
    Операция\    | text  |  text   |   text
    -------------------------------------------
    Home         | O(1)   | O(M)   | O(1)
    End          | O(N*K) | O(M)   | O(1)
    LineUp       | O(N)   | O(N)   | O(1)
    LineDn       | O(N)   | O(N)   | O(1)
    PgUp         | O(N*K) | O(N*K) | O(K)
    PgDn         | O(N*K) | O(N*K) | O(K)
    Edit         | O(M+N) | O(N)   | O(N)
    Умножаем веса для каждой из операций на матрицу и получаем трудоемкости для каждого из методов.

    Мог чего не учесть, прошу поправлять

  10. #9

    Регистрация
    16.09.2009
    Адрес
    г. Харьков
    Сообщений
    1,466
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    16
    Поблагодарили
    12 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    оценивать только время работы с текстом в отрыве от юзер интерфейса мало смысла !
    не стоит забывать что за компом сидит юзер, и этот юзер имеет некие ожидания скорости ответа компьютера
    типа:
    вставка/удаление символа : "Мгновенно" (он совершенно спокойно может набирать в слепую)
    переход на строку вверх/вниз "Мгновенно", (он смотрит на экран, помнит его содержимое, новые данные анализировать не надо)
    Страница ввер/низ : "быстро" (на экране новая инфомация, надо потратить время на ее анализ)
    Начало/Конец текста "достаточно быстро" (контекст сильно изменяется, нужно только в специальны случаях)
    сервисные операции (запись/поиск/etc) "желательно быстро" операции тяжелые, сложные, можно и подождать)

    т.е. например пауза в 1/3 секунды при вооде символа вообще не приемлема
    пауза в пару секунд при записи - терпимо

    и по посту, а разве для Two part - Edit не O(1) ?

    причем в любом случае, это скорость ВСЕГО редактора, с отрисовкой и прочим.

    голая математика тут мало подходит, это комплекс решений ....

  11. #10

    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,286
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    39 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от esl Посмотреть сообщение
    вставка/удаление символа : "Мгновенно" (он совершенно спокойно может набирать в слепую)
    Использование буфера. Оно же поможет с автоформатированием.

    Цитата Сообщение от esl Посмотреть сообщение
    Начало/Конец текста "достаточно быстро" (контекст сильно изменяется, нужно только в специальны случаях)
    Про конец соглашусь, про начало- нет. Переход на начало чисто психологически должен быть мгновенным.

    Цитата Сообщение от esl Посмотреть сообщение
    сервисные операции (запись/поиск/etc) "желательно быстро" операции тяжелые, сложные, можно и подождать)
    О! Кстати о поиске. Для него накладные расходы вообще должны отсутствовать.

    Цитата Сообщение от esl Посмотреть сообщение
    и по посту, а разве для Two part - Edit не O(1) ?
    С чего это? Данные разве не надо положить?
    Отредактировал оценку перехода на конец для plain text. Таки это надо отсчитать строки от конца.

    Цитата Сообщение от esl Посмотреть сообщение
    голая математика тут мало подходит, это комплекс решений ....
    Да, могут сказаться опущенные в "о большое" коэффициенты. Только узнать это можно одним способом- взять и сделать. Так что не слушай никого, бери и пробуй

Страница 10 из 13 ПерваяПервая ... 678910111213 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Алгоритм текстового Quest'a
    от ALKO в разделе Программирование
    Ответов: 11
    Последнее: 23.12.2010, 00:47
  2. Как проще код из текстового файла -> Alasm-файл?
    от TomCaT в разделе Программирование
    Ответов: 10
    Последнее: 28.05.2010, 16:53
  3. Адаптация текстового редактора
    от Raydac в разделе Софт
    Ответов: 1
    Последнее: 09.06.2008, 14:27
  4. Интересная идея текстового интерфейса в играх
    от Black_Cat в разделе Программирование
    Ответов: 3
    Последнее: 18.11.2006, 15:22
  5. Проект муз. редактора для AY
    от Bulba в разделе Музыка
    Ответов: 36
    Последнее: 09.09.2005, 20:32

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •