@startuml
start
:pass data to ATStream via write;
if (isReady) then
:return error (could be call reset, to get new data);
Stop;
endif
:add new data to buffer;
if (AT Return at the begin) then (yes)
:Set "Return at the begin" flag;
if (Expected line count= 0) then (yes)
:(isReady=true);
Stop;
endif
else (no)
endif
:Count lines from last position;
if ("Return at the begin" flag is set) then (yes)
if (More lines then expected) then (yes)
:(isReady=true);
Stop;
endif
else (no)
if (AT Return at the end) then (yes)
:(isReady=true);
Stop;
endif
endif
:Stream still wait for data (isReady=false);
Stop;
@enduml