Пособие по практике программирования



Библиотека для распространения - часть 3


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

Если пользователь вызывает только csvgetline, то нет надобности разделять строку на поля; это можно сделать по специальному требованию. Происходит ли разделение полей ретиво (eager, непосредственно при чтении строки), лениво (lazy, только когда нужно посчитать количество полей) или очень ленива (very lazy, выделяется только запрошенное поле) — еще одна деталь реализации, скрытая от пользователя.

Управление ресурсами. Мы должны решить, кто отвечает за совместно используемую информацию.

Возвращает ли csvgetline исходные данные или делает копию? Мы решили, что csvgetline возвращает указатель на исходные данные, которые будут перезаписаны при чтении следующей строки. Поля будут созданы в копии введенной строки, и csvf ield будет возвращать указатель на поле в копии строки. При таких соглашениях пользователь должен сам создавать дополнительную копию, если какая-то конкретная строка или поле должны быть сохранены или изменены, и пользователь же отвечает за высвобождение этой памяти после того, как необходимость в ней отпадет.

Кто открывает и закрывает файл ввода? Кто бы ни открывал вводимый файл, он же должен его закрыть; парные действия должны выполняться на одном уровне или в одном и том же месте. Мы будем исходить из предположения, что csvgetline вызывается с указателем FILE, определяющим уже открытый файл; по окончании обработки файл будет закрыт вызывающей стороной.

Управление ресурсами, используемыми совместно или передающимися между библиотекой и вызывающими ее программами, — сложная задача; часто существуют веские, но противоречивые доводы в пользу различных решений.




Содержание  Назад  Вперед