.
mmm estube haciendo algunas funciones hace ya tiempo pero no me animaba a sacarlas a la luz pero bueno aqui estan las clases para el trato de Bytes.

cls_byte.h

Código: Seleccionar todo


#ifndef _CLS_BYTE_H_
#define _CLS_BYTE_H_

#include <fstream>
#include <stdlib.h>
#include <string.h>
#include "Bytes/modutiles.h"

//    #include <stdbool.h> <-- C ANSI... (C99)CLS_BYTE_CPP

class cls_byte;

#ifndef Struct_clsByte_
#define Struct_clsByte_
struct Struct_clsByte
{
    cls_byte    *pbyt_class;
    size_t      szt_count;
};
#endif  // Struct_clsByte_

class cls_byte
{
private:
    size_t        szt_len;
    Byte          *pbyt_data;
public:
    cls_byte();
    ~cls_byte();

    size_t           Getlen ( );
    Byte       *GetBytesPtr ( );
    struct Struct_Byte *GetBytes ( );

    Byte          *SetBytes ( Byte *pByt_Bytes , size_t szt_lnBytes );  // ok
    Byte          *SetBytes ( cls_byte     *pclsbyteFind );
    Byte          *SetBytes ( Struct_Byte  *pclsbyteFind );             // ok

    bool            SetBytesFromFile( const char *pcchr );
    bool            SetBytesFromFile( const char *pcchr , size_t szt_ini );
    bool            SetBytesFromFile( const char *pcchr , size_t szt_ini , long lng_len );

    cls_byte       *Mid     ( size_t szt_start , size_t szt_len );
    cls_byte       *Mid     ( size_t szt_start );

    Struct_clsByte *Split   ( Byte *pbyt_delimiter , size_t szt_lndelimiter , long lng_limit );
    Struct_clsByte *Split   ( Byte *pbyt_delimiter , size_t szt_lndelimiter );
    Struct_clsByte *Split   ( cls_byte *pclsbytelim , long lng_limit );
    Struct_clsByte *Split   ( cls_byte *pclsbytelim );

    cls_byte       *Replace ( cls_byte *pclsbyteFind , cls_byte *pclsbyteReplacement );
    cls_byte       *Replace ( cls_byte *pclsbyteFind , cls_byte *pclsbyteReplacement , size_t szt_Start );
    cls_byte       *Replace ( cls_byte *pclsbyteFind , cls_byte *pclsbyteReplacement , size_t szt_Start , long lng_Count );
    cls_byte       *Replace ( cls_byte *pclsbyteFind , cls_byte *pclsbyteReplacemente , size_t szt_Start , long lng_Count , e_CompareMethod enum_Compare );
    cls_byte       *Replace ( cls_byte *pclsbyteFind , Byte *pByt_Replacement , size_t szt_lnReplacement );
    cls_byte       *Replace ( cls_byte *pclsbyteFind , Byte *pByt_Replacement , size_t szt_lnReplacement , size_t szt_Start );
    cls_byte       *Replace ( cls_byte *pclsbyteFind , Byte *pByt_Replacement , size_t szt_lnReplacement , size_t szt_Start , long lng_Count );
    cls_byte       *Replace ( cls_byte *pclsbyteFind , Byte *pByt_Replacement , size_t szt_lnReplacement , size_t szt_Start , long lng_Count , e_CompareMethod enum_Compare );
    cls_byte       *Replace ( Byte *pByt_Find , size_t szt_lnFind , cls_byte *pclsbyteReplacemente );
    cls_byte       *Replace ( Byte *pByt_Find , size_t szt_lnFind , cls_byte *pclsbyteReplacemente , size_t szt_Start );
    cls_byte       *Replace ( Byte *pByt_Find , size_t szt_lnFind , cls_byte *pclsbyteReplacemente , size_t szt_Start , long lng_Count );
    cls_byte       *Replace ( Byte *pByt_Find , size_t szt_lnFind , cls_byte *pclsbyteReplacemente , size_t szt_Start , long lng_Count , e_CompareMethod enum_Compare );
    cls_byte       *Replace ( Byte *pByt_Find , size_t szt_lnFind , Byte *pByt_Replacement , size_t szt_lnReplacement );
    cls_byte       *Replace ( Byte *pByt_Find , size_t szt_lnFind , Byte *pByt_Replacement , size_t szt_lnReplacement , size_t szt_Start );
    cls_byte       *Replace ( Byte *pByt_Find , size_t szt_lnFind , Byte *pByt_Replacement , size_t szt_lnReplacement , size_t szt_Start , long lng_Count );
    cls_byte       *Replace ( Byte *pByt_Find , size_t szt_lnFind , Byte *pByt_Replacement , size_t szt_lnReplacement , size_t szt_Start , long lng_Count , e_CompareMethod enum_Compare );

    size_t            Index ( cls_byte *pclsbyte );
    size_t            Index ( cls_byte *pclsbyte , size_t szt_Start );
    size_t            Index ( cls_byte *pclsbyte , size_t szt_Start , e_CompareMethod enum_Compare );
    size_t            Index ( Byte *pByt_Find , size_t szt_lsf );
    size_t            Index ( Byte *pByt_Find , size_t szt_lsf , size_t szt_Start );
    size_t            Index ( Byte *pByt_Find , size_t szt_lsf , size_t szt_Start , e_CompareMethod enum_Compare );

    bool              Exits ( cls_byte *pclsbyte );
    bool              Exits ( cls_byte *pclsbyte , size_t szt_Start );
    bool              Exits ( cls_byte *pclsbyte , size_t szt_Start , long lng_interval );
    bool              Exits ( cls_byte *pclsbyte , size_t szt_Start , long lng_interval , e_CompareMethod enum_Compare );
    bool              Exits ( Byte *pByt_Find , size_t szt_lsf );
    bool              Exits ( Byte *pByt_Find , size_t szt_lsf , size_t szt_Start );
    bool              Exits ( Byte *pByt_Find , size_t szt_lsf , size_t szt_Start , long lng_interval );
    bool              Exits ( Byte *pByt_Find , size_t szt_lsf , size_t szt_Start , long lng_interval , e_CompareMethod enum_Compare );
};
//    #include "cls_byte.cpp"
#endif // CLS_BYTE_H

cls_byte.cpp

Código: Seleccionar todo


#ifndef _CLS_BYTE_CPP
#define _CLS_BYTE_CPP 1

    #include "cls_byte.h"
    
    cls_byte::cls_byte()
    {
        this->szt_len   = 0;
        this->pbyt_data  = NULL;
    }

    cls_byte::~cls_byte()
        { setnewptrf<Byte*>( this->pbyt_data , NULL ); }

    size_t cls_byte::Getlen()
        { return this->szt_len; }

    Byte *cls_byte::GetBytesPtr()
        { return this->pbyt_data; }

    bool cls_byte::SetBytesFromFile(const char *pcchr)
        { return this->SetBytesFromFile( pcchr , 0 , -1 ); }
    bool cls_byte::SetBytesFromFile(const char *pcchr, size_t szt_ini)
        { return this->SetBytesFromFile( pcchr , szt_ini , -1 ); }
    bool cls_byte::SetBytesFromFile(const char *pcchr, size_t szt_ini, long lng_len)
        {
            FILE            *hfile              = fopen( pcchr , "r+b" );
            Struct_Byte     stbyt_data          = { NULL , 0 };
            size_t          szt_end             = 0;

            if ( hfile != NULL )
            {
                stbyt_data.szt_lenbytes             = flen( hfile );
                if ( lng_len <= -1 )
                    lng_len                             = stbyt_data.szt_lenbytes;
                szt_end = 0;
                if ( fix_numbers_range<size_t>( &szt_ini , &szt_end , &lng_len , NULL ,  0 , stbyt_data.szt_lenbytes-1 ) == true )
                {
                    stbyt_data.pbyt_bytes       = (Byte*)malloc(sizeof(Byte)*lng_len);
                    fseek       ( hfile , (long)szt_ini , SEEK_SET);
                    fread       ( (char*)stbyt_data.pbyt_bytes , 1 , lng_len ,  hfile );
                }
                stbyt_data.szt_lenbytes     = (size_t)lng_len;
                fclose      ( hfile );
                this->SetBytes( &stbyt_data );
            }

        }
    Byte *cls_byte::SetBytes(Struct_Byte *pclsbyteFind)
        { return this->SetBytes( pclsbyteFind->pbyt_bytes , pclsbyteFind->szt_lenbytes ); }
    Byte *cls_byte::SetBytes(cls_byte *pclsbyteFind)
        { return this->SetBytes( pclsbyteFind->GetBytesPtr() , pclsbyteFind->Getlen() ); }
    Byte *cls_byte::SetBytes(Byte *pByt_Bytes, size_t szt_lnBytes)
    {
        this->szt_len = szt_lnBytes;
        if ( setnewptrf<Byte*>( this->pbyt_data , ByteClone( pByt_Bytes , this->szt_len ) ) == NULL)
        {
            this->szt_len = 0;
            return pByt_Bytes;
        }
        return NULL;
    }

    Struct_Byte *cls_byte::GetBytes()
    {
        struct Struct_Byte *pstrbyt_ret = (Struct_Byte*)malloc(sizeof(Struct_Byte));
        pstrbyt_ret->pbyt_bytes = ByteClone( this->pbyt_data , this->szt_len );
        pstrbyt_ret->szt_lenbytes =  this->szt_len;
        if ( pstrbyt_ret->pbyt_bytes == NULL )
            pstrbyt_ret->szt_lenbytes = 0;
        return pstrbyt_ret;
    }

    size_t cls_byte::Index(Byte *pByt_Find, size_t szt_lsf)
        { return ByteIndex( this->pbyt_data , this->szt_len  ,pByt_Find , szt_lsf ); }
    size_t cls_byte::Index(Byte *pByt_Find, size_t szt_lsf, size_t szt_Start)
        { return ByteIndex( this->pbyt_data , this->szt_len , pByt_Find , szt_lsf , szt_Start ); }
    size_t cls_byte::Index(Byte *pByt_Find, size_t szt_lsf, size_t szt_Start, e_CompareMethod enum_Compare)
        { return ByteIndex( this->pbyt_data , this->szt_len , pByt_Find , szt_lsf , szt_Start , enum_Compare ); }
    size_t cls_byte::Index(cls_byte *pclsbyte)
        { return ByteIndex( this->pbyt_data , this->szt_len , pclsbyte->pbyt_data , pclsbyte->szt_len ); }
    size_t cls_byte::Index(cls_byte *pclsbyte, size_t szt_Start)
        { return ByteIndex( this->pbyt_data , this->szt_len , pclsbyte->pbyt_data , pclsbyte->szt_len , szt_Start ); }
    size_t cls_byte::Index(cls_byte *pclsbyte, size_t szt_Start, e_CompareMethod enum_Compare)
        { return ByteIndex( this->pbyt_data , this->szt_len , pclsbyte->pbyt_data , pclsbyte->szt_len , szt_Start , enum_Compare ); }


    bool cls_byte::Exits(cls_byte *pclsbyte)
        { return ByteExits( this->pbyt_data , this->szt_len , pclsbyte->pbyt_data , pclsbyte->szt_len ); }
    bool cls_byte::Exits(cls_byte *pclsbyte, size_t szt_Start)
        { return ByteExits( this->pbyt_data , this->szt_len , pclsbyte->pbyt_data , pclsbyte->szt_len , szt_Start ); }
    bool cls_byte::Exits(cls_byte *pclsbyte, size_t szt_Start, long lng_interval)
        { return ByteExits( this->pbyt_data , this->szt_len , pclsbyte->pbyt_data , pclsbyte->szt_len , szt_Start , lng_interval ); }
    bool cls_byte::Exits(cls_byte *pclsbyte, size_t szt_Start, long lng_interval, e_CompareMethod enum_Compare)
        { return ByteExits( this->pbyt_data , this->szt_len , pclsbyte->pbyt_data , pclsbyte->szt_len , szt_Start , lng_interval , enum_Compare ); }
    bool cls_byte::Exits(Byte *pByt_Find, size_t szt_lsf)
        { return ByteExits( this->pbyt_data , this->szt_len , pByt_Find , szt_lsf ); }
    bool cls_byte::Exits(Byte *pByt_Find, size_t szt_lsf, size_t szt_Start)
        { return ByteExits( this->pbyt_data , this->szt_len , pByt_Find , szt_lsf , szt_Start ); }
    bool cls_byte::Exits(Byte *pByt_Find, size_t szt_lsf, size_t szt_Start, long lng_interval)
        { return ByteExits( this->pbyt_data , this->szt_len , pByt_Find , szt_lsf , szt_Start , lng_interval ); }
    bool cls_byte::Exits(Byte *pByt_Find, size_t szt_lsf, size_t szt_Start, long lng_interval, e_CompareMethod enum_Compare)
        { return ByteExits( this->pbyt_data , this->szt_len , pByt_Find , szt_lsf , szt_Start , lng_interval , enum_Compare ); }



    cls_byte *cls_byte::Replace ( cls_byte *pclsbyteFind , cls_byte *pclsbyteReplacement )
        { return this->Replace( pclsbyteFind->GetBytesPtr() , pclsbyteFind->Getlen() , pclsbyteReplacement->GetBytesPtr() , pclsbyteReplacement->Getlen() , 0 , -1 , BINARY ); }
    cls_byte *cls_byte::Replace ( cls_byte *pclsbyteFind , cls_byte *pclsbyteReplacement , size_t szt_Start )
        { return this->Replace( pclsbyteFind->GetBytesPtr() , pclsbyteFind->Getlen() , pclsbyteReplacement->GetBytesPtr() , pclsbyteReplacement->Getlen() , szt_Start , -1 , BINARY ); }
    cls_byte *cls_byte::Replace ( cls_byte *pclsbyteFind , cls_byte *pclsbyteReplacement , size_t szt_Start , long lng_Count )
        { return this->Replace( pclsbyteFind->GetBytesPtr() , pclsbyteFind->Getlen() , pclsbyteReplacement->GetBytesPtr() , pclsbyteReplacement->Getlen() , szt_Start , lng_Count , BINARY ); }
    cls_byte *cls_byte::Replace ( cls_byte *pclsbyteFind , cls_byte *pclsbyteReplacement , size_t szt_Start , long lng_Count , e_CompareMethod enum_Compare )
        { return this->Replace( pclsbyteFind->GetBytesPtr() , pclsbyteFind->Getlen() , pclsbyteReplacement->GetBytesPtr() , pclsbyteReplacement->Getlen() , szt_Start , lng_Count , enum_Compare ); }
    cls_byte *cls_byte::Replace ( cls_byte *pclsbyteFind , Byte *pByt_Replacement , size_t szt_lnReplacement )
        { return this->Replace( pclsbyteFind->GetBytesPtr() , pclsbyteFind->Getlen() , pByt_Replacement , szt_lnReplacement , 0 , -1 , BINARY ); }
    cls_byte *cls_byte::Replace ( cls_byte *pclsbyteFind , Byte *pByt_Replacement , size_t szt_lnReplacement , size_t szt_Start )
        { return this->Replace( pclsbyteFind->GetBytesPtr() , pclsbyteFind->Getlen() , pByt_Replacement , szt_lnReplacement , szt_Start , -1 , BINARY ); }
    cls_byte *cls_byte::Replace ( cls_byte *pclsbyteFind , Byte *pByt_Replacement , size_t szt_lnReplacement , size_t szt_Start , long lng_Count )
        { return this->Replace( pclsbyteFind->GetBytesPtr() , pclsbyteFind->Getlen() , pByt_Replacement , szt_lnReplacement , szt_Start , lng_Count , BINARY ); }
    cls_byte *cls_byte::Replace ( cls_byte *pclsbyteFind , Byte *pByt_Replacement , size_t szt_lnReplacement , size_t szt_Start , long lng_Count , e_CompareMethod enum_Compare )
        { return this->Replace( pclsbyteFind->GetBytesPtr() , pclsbyteFind->Getlen() , pByt_Replacement , szt_lnReplacement , szt_Start , lng_Count , enum_Compare ); }
    cls_byte *cls_byte::Replace ( Byte *pByt_Find , size_t szt_lnFind , cls_byte *pclsbyteReplacement )
        { return this->Replace( pByt_Find , szt_lnFind , pclsbyteReplacement->GetBytesPtr() , pclsbyteReplacement->Getlen() , 0 , -1 , BINARY ); }
    cls_byte *cls_byte::Replace ( Byte *pByt_Find , size_t szt_lnFind , cls_byte *pclsbyteReplacement , size_t szt_Start )
        { return this->Replace( pByt_Find , szt_lnFind , pclsbyteReplacement->GetBytesPtr() , pclsbyteReplacement->Getlen() , szt_Start , -1 , BINARY ); }
    cls_byte *cls_byte::Replace ( Byte *pByt_Find , size_t szt_lnFind , cls_byte *pclsbyteReplacement , size_t szt_Start , long lng_Count )
        { return this->Replace( pByt_Find , szt_lnFind , pclsbyteReplacement->GetBytesPtr() , pclsbyteReplacement->Getlen() , szt_Start , lng_Count , BINARY ); }
    cls_byte *cls_byte::Replace ( Byte *pByt_Find , size_t szt_lnFind , cls_byte *pclsbyteReplacement , size_t szt_Start , long lng_Count , e_CompareMethod enum_Compare )
        { return this->Replace( pByt_Find , szt_lnFind , pclsbyteReplacement->GetBytesPtr() , pclsbyteReplacement->Getlen() , szt_Start , lng_Count , enum_Compare ); }
    cls_byte *cls_byte::Replace(Byte *pByt_Find, size_t szt_lnFind, Byte *pByt_Replacement, size_t szt_lnReplacement)
        { return this->Replace( pByt_Find , szt_lnFind , pByt_Replacement , szt_lnReplacement , 0 , -1 , BINARY ); }
    cls_byte *cls_byte::Replace(Byte *pByt_Find, size_t szt_lnFind, Byte *pByt_Replacement, size_t szt_lnReplacement, size_t szt_Start)
        { return this->Replace( pByt_Find , szt_lnFind , pByt_Replacement , szt_lnReplacement , szt_Start , -1 , BINARY ); }
    cls_byte *cls_byte::Replace(Byte *pByt_Find, size_t szt_lnFind, Byte *pByt_Replacement, size_t szt_lnReplacement, size_t szt_Start, long lng_Count)
        { return this->Replace( pByt_Find , szt_lnFind , pByt_Replacement , szt_lnReplacement , szt_Start , lng_Count , BINARY ); }
    cls_byte *cls_byte::Replace(Byte *pByt_Find, size_t szt_lnFind, Byte *pByt_Replacement, size_t szt_lnReplacement, size_t szt_Start, long lng_Count, e_CompareMethod enum_Compare)
        {
            cls_byte            *cls_Ret    = (cls_byte*)malloc(sizeof(cls_byte));
            Struct_Byte         *pByt_Ret   = NULL;
            Byte                *pByt_ClnF  = ByteClone ( pByt_Find , szt_lnFind );
            Byte                *pByt_ClnR  = ByteClone ( pByt_Replacement , szt_lnReplacement );

            pByt_Ret                = ByteReplace( this->pbyt_data , this->szt_len , pByt_ClnF , szt_lnFind , pByt_ClnR , szt_lnReplacement , szt_Start , lng_Count , enum_Compare );
            cls_Ret->SetBytes       ( pByt_Ret );

            setnewptrf<Byte*>        ( pByt_ClnF , NULL );
            setnewptrf<Byte*>        ( pByt_ClnR , NULL );
            setnewptrf<Byte*>        ( pByt_Ret->pbyt_bytes , NULL );
            setnewptrf<Struct_Byte*> ( pByt_Ret , NULL );

            return cls_Ret;
        }
    cls_byte *cls_byte::Mid(size_t szt_start)
        { return this->Mid   ( szt_start , this->szt_len ); }
    cls_byte *cls_byte::Mid(size_t szt_start, size_t szt_len)
        {
            cls_byte            *cls_Ret    = (cls_byte*)malloc(sizeof(cls_byte));
            Struct_Byte         *pByt_Ret   = NULL;

            pByt_Ret                = ByteMid ( this->pbyt_data , this->szt_len , szt_start , szt_len );
            cls_Ret->SetBytes       ( pByt_Ret );

            setnewptrf<Byte*>        ( pByt_Ret->pbyt_bytes , NULL );
            setnewptrf<Struct_Byte*> ( pByt_Ret , NULL );

            return cls_Ret;
        }

    Struct_clsByte *cls_byte::Split(Byte *pbyt_delimiter, size_t szt_lndelimiter)
        { return this->Split ( pbyt_delimiter , szt_lndelimiter , -1 ); }
    Struct_clsByte *cls_byte::Split(Byte *pbyt_delimiter, size_t szt_lndelimiter, long lng_limit)
        {
            Struct_clsByte      *cls_Ret    = (Struct_clsByte*)malloc(sizeof(Struct_clsByte));
            Struct_Byte_Split   *pByt_Ret   = NULL;
            Byte                *pByt_Clone = ByteClone ( pbyt_delimiter , szt_lndelimiter );

            pByt_Ret                = ByteSplit ( this->pbyt_data , this->szt_len , pByt_Clone , szt_lndelimiter , lng_limit );

            cls_Ret->szt_count      = 0;
            cls_Ret->pbyt_class     = (cls_byte*)malloc(sizeof(cls_byte)*pByt_Ret->szt_ln);

            for ( cls_Ret->szt_count=0 ; cls_Ret->szt_count<pByt_Ret->szt_ln ; ++cls_Ret->szt_count )
            {
                cls_Ret->pbyt_class[ cls_Ret->szt_count ].SetBytes( pByt_Ret->Struct[ cls_Ret->szt_count ] );
                setnewptrf<Byte*>        ( pByt_Ret->Struct[ cls_Ret->szt_count ]->pbyt_bytes , NULL );
                setnewptrf<Struct_Byte*> ( pByt_Ret->Struct[ cls_Ret->szt_count ] , NULL );
            }

            setnewptrf<Byte*>                ( pByt_Clone , NULL );
            setnewptrf<Struct_Byte_Split*>   ( pByt_Ret , NULL );

            return cls_Ret;
        }
    Struct_clsByte *cls_byte::Split(cls_byte *pclsbytelim)
        { return this->Split ( pclsbytelim->GetBytesPtr() , pclsbytelim->Getlen() , -1 ); }
    Struct_clsByte *cls_byte::Split(cls_byte *pclsbytelim, long lng_limit)
        { return this->Split ( pclsbytelim->GetBytesPtr() , pclsbytelim->Getlen() , lng_limit ); }

#endif

Temible sLunas!¡.
Web: http://infrangelux.sytes.net/
ScanX: http://ScanX.sytes.net/
FileX: http://FileX.sytes.net/
Blog: http://BlogX.sytes.net/

Imagen


The Dark Shadow is my passion.
El infierno es mi Hogar, mi novia es Lilith y el metal mi religion
Responder

Volver a “Fuentes”