Galkov писал(а):
Пользователь заказывает "окно" (параметрами Offset и Size) в неком файле.И ВСЕ -- он получает стрим ИМЕННО заявленного размера, и байты в этом стриме соответствуют ИМЕННО заявленному смещению.
Даже если пользовательское "окно" выходит за размеры файла
Что-то сложно как то.
Предлагаю такое:
1. Делаем из SharedStream менеджер SharedHeap, убираем все точки и свойства. Пусть он будет иметь свойство "Имя области общей памяти" (которая для удобства будет еще и именем шареного файла) и... (TODO: подумать, что еще может пригодиться. Из кандидатов: максимальный размер выделяемой шареной области. Но пока о концепте). И все.
2. Делаем компонент SharedMemory, который по сути является тем же самым Memory, только со свойством-указателем на менеджера SharedHeap и именем этой шареной переменной.
3. И компонент SharedStream подобный SharedMemory, в котором будет храниться расшаренный поток любых байт (т.к. крайне сложно будет его обыграть через SharedMemory).
Для пользователя все очень просто: кидаем на схему SharedHeap, обзываем и тыкаем сколько хотим SharedMemory.
В плане реализации, конечно, придется попотеть. Но не потому ли интересно программистом быть, чтобы решать такие задачки?