16acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn/*
26acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennOpenCV for Android NDK
36acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennCopyright (c) 2006-2009 SIProp Project http://www.siprop.org/
46acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
56acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennThis software is provided 'as-is', without any express or implied warranty.
66acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennIn no event will the authors be held liable for any damages arising from the use of this software.
76acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennPermission is granted to anyone to use this software for any purpose,
86acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennincluding commercial applications, and to alter it and redistribute it freely,
96acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennsubject to the following restrictions:
106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn3. This notice may not be removed or altered from any source distribution.
146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn*/
156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn#include "WLNonFileByteStream.h"
166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn///////////////////////////// WLNonFileByteStream ///////////////////////////////////
186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennWLNonFileByteStream::WLNonFileByteStream()
206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    m_start = m_end = m_current = 0;
226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    _size = 0;
236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    m_is_opened = false;
246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius RennWLNonFileByteStream::~WLNonFileByteStream()
286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn	Deallocate();
306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid  WLNonFileByteStream::Allocate(int data_size)
346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn	if(!m_start)
366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    	m_start = new uchar[data_size];
376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    m_end = m_start + data_size;
396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    m_current = m_start;
406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid  WLNonFileByteStream::Deallocate()
436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn	if(m_start)
456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn	{
466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn		delete [] m_start;
476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn		m_start = 0;
486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn	}
496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
516acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennbool  WLNonFileByteStream::Open(int data_size)
526acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
536acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    Close();
546acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    Allocate(data_size);
556acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
566acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    m_is_opened = true;
576acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    m_current = m_start;
586acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    _size = data_size;
596acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
606acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    return true;
616acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
626acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
636acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
646acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid  WLNonFileByteStream::Close()
656acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
666acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    m_is_opened = false;
676acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn	Deallocate();
686acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
696acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
706acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
716acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid WLNonFileByteStream::PutByte( int val )
726acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
736acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    *m_current++ = (uchar)val;
746acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
756acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
766acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
776acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid WLNonFileByteStream::PutBytes( const void* buffer, int count )
786acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
796acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    uchar* data = (uchar*)buffer;
806acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
816acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    assert( data && m_current && count >= 0 );
826acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
836acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    while( count )
846acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
856acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        int l = (int)(m_end - m_current);
866acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
876acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        if( l > count )
886acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            l = count;
896acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
906acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        if( l > 0 )
916acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        {
926acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            memcpy( m_current, data, l );
936acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            m_current += l;
946acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            data += l;
956acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn            count -= l;
966acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        }
976acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
986acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
996acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1006acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1016acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid WLNonFileByteStream::PutWord( int val )
1026acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
1036acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    uchar *current = m_current;
1046acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1056acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( current+1 < m_end )
1066acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
1076acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        current[0] = (uchar)val;
1086acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        current[1] = (uchar)(val >> 8);
1096acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        m_current = current + 2;
1106acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
1116acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    else
1126acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
1136acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        PutByte(val);
1146acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        PutByte(val >> 8);
1156acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
1166acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
1176acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1186acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1196acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennvoid WLNonFileByteStream::PutDWord( int val )
1206acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
1216acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    uchar *current = m_current;
1226acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1236acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    if( current+3 < m_end )
1246acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
1256acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        current[0] = (uchar)val;
1266acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        current[1] = (uchar)(val >> 8);
1276acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        current[2] = (uchar)(val >> 16);
1286acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        current[3] = (uchar)(val >> 24);
1296acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        m_current = current + 4;
1306acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
1316acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    else
1326acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    {
1336acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        PutByte(val);
1346acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        PutByte(val >> 8);
1356acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        PutByte(val >> 16);
1366acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn        PutByte(val >> 24);
1376acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn    }
1386acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
1396acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1406acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1416acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennuchar* WLNonFileByteStream::GetByte()
1426acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
1436acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn	return m_start;
1446acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
1456acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
1466acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Rennint WLNonFileByteStream::GetSize()
1476acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn{
1486acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn	return _size;
1496acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn}
1506acb9a7ea3d7564944e12cbc73a857b88c1301eeMarius Renn
151