Click here to Skip to main content
15,885,366 members
Articles / High Performance Computing

HPC Template Library, A Supplement to the STL

Rate me:
Please Sign up or sign in to vote.
4.88/5 (11 votes)
15 Dec 2017MIT3 min read 38.1K   1.3K   39  
The HPC Template Library is a supplement to the Standard Template Library providing threadsafe containers.
/*
**	This file is part of the Hpc Template Library (Htl or HTL).
**  It is based on a merger of QT, STL, and SigSlots along with development of new classes.
**  License information is in the HtlLicense.h file
**	This software was merged and developed by:
**	
**  Anthony Daniels
**	QT, STL, SigSlots
**
**  HTL is free software: you can redistribute it and/or modify
**  it under the terms of the GNU Lesser General Public License as published by
**  the Free Software Foundation, either version 3 of the License, or
**  (at your option) any later version.
**
**  The United States of America Department of Defense has unlimited 
**	usage, redistribution, and modification rights to HtlStar.
**
**  HTL is distributed in the hope that it will be useful,
**  but WITHOUT ANY WARRANTY; without even the implied warranty of
**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
**  GNU Lesser General Public License for more details.
**
**  You should have received a copy of the GNU Lesser General Public License
**  along with HTL.  If not, see <http://www.gnu.org/licenses/>.
*/		
#pragma once
#pragma warning(push)
#pragma warning (disable : 4005 ) /* macro redefinition */
#define HTL_DLLEXPORT
#pragma warning(pop)



#include "..\HtlString\HtlString.h"
#include "..\modHtlRandNumGen.h"
#include ".\HtlGUID128.h"
#include ".\HtlGUID256.h"


//STL streaming functions needed sscanf, sprintf
#include <iostream>
using namespace std;
#pragma warning(push)
#pragma warning (disable : 4996 ) /* sprintf, sscanf unsafe */
#pragma warning (disable : 4477 ) /* sprintf, sscanf deprecated warning */
#pragma warning (disable : 4778 ) /* sprintf, sscanf deprecated warning */
#pragma warning (disable : 4018 ) /* warning C4018: '<': signed/unsigned mismatch */

namespace HTL
{


	HtlGUID256::HtlGUID256()
	{
		setNull();
	};
	//This constructor is kept for Windows compatibility
	//HtlGUID128 native is symmetric storage
	//Microsoft Windows format for GUIDs is  c5057190-a286-4427-b172-2fc56a92423f in hex string
	//128 bit GUID becomes c5057190-a2864427-b1722fc5-6a92423f-00000000-00000000-00000000-00000000
	//with zero padding in the later 128 bits
	HtlGUID256::HtlGUID256 ( uint l, ushort w1, ushort w2, uchar b1, uchar b2, uchar b3, uchar b4, uchar b5, uchar b6, uchar b7, uchar b8 )
	{
		try{
			char chrBuff[20];
			setNull();

			sprintf(chrBuff,"%08x",l);//convert it to hexidecimal characters
			sscanf(chrBuff,"%02x%02x%02x%02x",
				&(m_uchrData[0]),
				&(m_uchrData[1]),
				&(m_uchrData[2]),
				&(m_uchrData[3]) );
			sprintf(chrBuff,"%04x",w1);//convert it to hexidecimal characters
			sscanf(chrBuff,"%02x%02x%",
				&(m_uchrData[4]),
				&(m_uchrData[5]) );
			sprintf(chrBuff,"%04x",w2);//convert it to hexidecimal characters
			sscanf(chrBuff,"%02x%02x%",
				&(m_uchrData[6]),
				&(m_uchrData[7]) );

			m_uchrData[8] = b1;
			m_uchrData[9] = b2;
			m_uchrData[10] = b3;
			m_uchrData[11] = b4;
			m_uchrData[12] = b5;
			m_uchrData[13] = b6;
			m_uchrData[14] = b7;
			m_uchrData[15] = b8;
			
			for(int i = 16; i < 32; i++)
			{
				m_uchrData[i] = '0';
			};
		}catch(...){

		};
		return;
	};
	//This is HtlGUID native format with symmetric strings  c5057190-a2864427-b1722fc5-6a92423f-c5057190-a2864427-b1722fc5-6a92423f
	HtlGUID256::HtlGUID256 ( uint w0, uint w1, uint w2, uint w3,uint w4, uint w5, uint w6, uint w7)
	{
		try{
			char chrBuff[20];
			setNull();

			sprintf(chrBuff,"%08x",w0);//convert it to hexidecimal characters
			sscanf(chrBuff,"%02x%02x%02x%02x",
				&(m_uchrData[0]),
				&(m_uchrData[1]),
				&(m_uchrData[2]),
				&(m_uchrData[3]) );
			sprintf(chrBuff,"%08x",w1);//convert it to hexidecimal characters
			sscanf(chrBuff,"%02x%02x%02x%02x",
				&(m_uchrData[4]),
				&(m_uchrData[5]),
				&(m_uchrData[6]),
				&(m_uchrData[7]) );
			sprintf(chrBuff,"%08x",w2);//convert it to hexidecimal characters
			sscanf(chrBuff,"%02x%02x%02x%02x",
				&(m_uchrData[8]),
				&(m_uchrData[9]),
				&(m_uchrData[10]),
				&(m_uchrData[11]) );
			sprintf(chrBuff,"%08x",w3);//convert it to hexidecimal characters
			sscanf(chrBuff,"%02x%02x%02x%02x",
				&(m_uchrData[12]),
				&(m_uchrData[13]),
				&(m_uchrData[14]),
				&(m_uchrData[15]) );
			sprintf(chrBuff,"%08x",w4);//convert it to hexidecimal characters
			sscanf(chrBuff,"%02x%02x%02x%02x",
				&(m_uchrData[16]),
				&(m_uchrData[17]),
				&(m_uchrData[18]),
				&(m_uchrData[19]) );
			sprintf(chrBuff,"%08x",w5);//convert it to hexidecimal characters
			sscanf(chrBuff,"%02x%02x%02x%02x",
				&(m_uchrData[20]),
				&(m_uchrData[21]),
				&(m_uchrData[22]),
				&(m_uchrData[23]) );
			sprintf(chrBuff,"%08x",w6);//convert it to hexidecimal characters
			sscanf(chrBuff,"%02x%02x%02x%02x",
				&(m_uchrData[24]),
				&(m_uchrData[25]),
				&(m_uchrData[26]),
				&(m_uchrData[27]) );
			sprintf(chrBuff,"%08x",w7);//convert it to hexidecimal characters
			sscanf(chrBuff,"%02x%02x%02x%02x",
				&(m_uchrData[28]),
				&(m_uchrData[29]),
				&(m_uchrData[30]),
				&(m_uchrData[31]) );

		}catch(...){

		};
		return;
	};

	HtlGUID256::HtlGUID256 ( const char* ptrRHS )
	{
		//ASSUMES NATIVE FORMAT
		try{
			setNull();
			if(!ptrRHS){return;};//safety code
			sscanf(ptrRHS,"%02x%02x%02x%02x-%02x%02x%02x%02x-%02x%02x%02x%02x-%02x%02x%02x%02x-%02x%02x%02x%02x-%02x%02x%02x%02x-%02x%02x%02x%02x-%02x%02x%02x%02x",
				&(m_uchrData[0]), &(m_uchrData[1]),	&(m_uchrData[2]), &(m_uchrData[3]),
				&(m_uchrData[4]), &(m_uchrData[5]),	&(m_uchrData[6]), &(m_uchrData[7]),
				&(m_uchrData[8]), &(m_uchrData[9]),	&(m_uchrData[10]), &(m_uchrData[11]),
				&(m_uchrData[12]), &(m_uchrData[13]), &(m_uchrData[14]), &(m_uchrData[15]),
				&(m_uchrData[16]), &(m_uchrData[17]), &(m_uchrData[18]), &(m_uchrData[19]),
				&(m_uchrData[20]), &(m_uchrData[21]), &(m_uchrData[22]), &(m_uchrData[23]),
				&(m_uchrData[24]), &(m_uchrData[25]), &(m_uchrData[26]), &(m_uchrData[27]),
				&(m_uchrData[28]), &(m_uchrData[29]), &(m_uchrData[30]), &(m_uchrData[31]) );
		}catch(...){

		}
		return;
	};
	HtlGUID256::HtlGUID256 ( const HtlString & strRHS )
	{
		m_chrNull = '0';

		HtlGUID256(strRHS.unicode());
		return;
	};
		
	HtlGUID256::HtlGUID256 ( const HtlGUID128 & ptrRHS )
	{
		setNull();
		for(int i = 0; i < 16; i++)
		{
			m_uchrData[i] = ptrRHS[i];
		};
	};

	HtlGUID256::HtlGUID256 ( const HtlGUID256 & ptrRHS )
	{
		for(int i = 0; i < 32; i++)
		{
			m_uchrData[i] = ptrRHS[i];
		};
	};
	HtlGUID256::~HtlGUID256()
	{
		setNull();	
	};

	//!Serialization TO string formats
	HtlString HtlGUID256::toString (void) const
	{
		char charBuf[256];
		sprintf(charBuf,"%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X",
			(m_uchrData[0]), (m_uchrData[1]), (m_uchrData[2]), (m_uchrData[3]),
			(m_uchrData[4]), (m_uchrData[5]), (m_uchrData[6]), (m_uchrData[7]),
			(m_uchrData[8]), (m_uchrData[9]), (m_uchrData[10]),	(m_uchrData[11]),
			(m_uchrData[12]), (m_uchrData[13]),	(m_uchrData[14]),(m_uchrData[15]),
			(m_uchrData[16]), (m_uchrData[17]), (m_uchrData[18]), (m_uchrData[19]),
			(m_uchrData[20]), (m_uchrData[21]), (m_uchrData[22]), (m_uchrData[23]),
			(m_uchrData[24]), (m_uchrData[25]), (m_uchrData[26]), (m_uchrData[27]),
			(m_uchrData[28]), (m_uchrData[29]),	(m_uchrData[30]), (m_uchrData[31]) );
		HtlString strOut = charBuf;
		return strOut;	
	};

	std::string HtlGUID256::toStdString (void) const
	{
		char charBuf[256];
		sprintf(charBuf,"%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X",
			(m_uchrData[0]), (m_uchrData[1]), (m_uchrData[2]), (m_uchrData[3]),
			(m_uchrData[4]), (m_uchrData[5]), (m_uchrData[6]), (m_uchrData[7]),
			(m_uchrData[8]), (m_uchrData[9]), (m_uchrData[10]),	(m_uchrData[11]),
			(m_uchrData[12]), (m_uchrData[13]),	(m_uchrData[14]),(m_uchrData[15]),
			(m_uchrData[16]), (m_uchrData[17]), (m_uchrData[18]), (m_uchrData[19]),
			(m_uchrData[20]), (m_uchrData[21]), (m_uchrData[22]), (m_uchrData[23]),
			(m_uchrData[24]), (m_uchrData[25]), (m_uchrData[26]), (m_uchrData[27]),
			(m_uchrData[28]), (m_uchrData[29]),	(m_uchrData[30]), (m_uchrData[31]) );

		std::string strOut = charBuf;
		return strOut;
	};

	const char* HtlGUID256::toCharString(void)
	{
		sprintf(m_strData,"%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X",
			(m_uchrData[0]), (m_uchrData[1]), (m_uchrData[2]), (m_uchrData[3]),
			(m_uchrData[4]), (m_uchrData[5]), (m_uchrData[6]), (m_uchrData[7]),
			(m_uchrData[8]), (m_uchrData[9]), (m_uchrData[10]),	(m_uchrData[11]),
			(m_uchrData[12]), (m_uchrData[13]),	(m_uchrData[14]),(m_uchrData[15]),
			(m_uchrData[16]), (m_uchrData[17]), (m_uchrData[18]), (m_uchrData[19]),
			(m_uchrData[20]), (m_uchrData[21]), (m_uchrData[22]), (m_uchrData[23]),
			(m_uchrData[24]), (m_uchrData[25]), (m_uchrData[26]), (m_uchrData[27]),
			(m_uchrData[28]), (m_uchrData[29]),	(m_uchrData[30]), (m_uchrData[31]) );

		return &m_strData[0];
	};

	//!Serialization FROM string formats
	bool HtlGUID256::fromString(HtlString & ptrRHS)
	{
		try{
			char chrBuf[256];
			int p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15;
			int p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31;
			strcpy(chrBuf, ptrRHS.unicode());
			sscanf_s(chrBuf,"%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X",
				&p0, &p1, &p2, &p3, &p4, &p5, &p6, &p7, &p8, &p9, &p10, &p11, &p12, &p13, &p14, &p15,
				&p16, &p17, &p18, &p19, &p20, &p21, &p22, &p23, &p24, &p25, &p26, &p27, &p28, &p29, &p30, &p31);

			(m_uchrData[0]) = unsigned char(p0);
			(m_uchrData[1]) = unsigned char(p1);
			(m_uchrData[2]) = unsigned char(p2);
			(m_uchrData[3]) = unsigned char(p3);
			(m_uchrData[4]) = unsigned char(p4);
			(m_uchrData[5]) = unsigned char(p5);
			(m_uchrData[6]) = unsigned char(p6);
			(m_uchrData[7]) = unsigned char(p7);
			(m_uchrData[8]) = unsigned char(p8);
			(m_uchrData[9]) = unsigned char(p9);
			(m_uchrData[10]) = unsigned char(p10);
			(m_uchrData[11]) = unsigned char(p11);
			(m_uchrData[12]) = unsigned char(p12);
			(m_uchrData[13]) = unsigned char(p13);
			(m_uchrData[14]) = unsigned char(p14);
			(m_uchrData[15]) = unsigned char(p15);
			(m_uchrData[16]) = unsigned char(p16);
			(m_uchrData[17]) = unsigned char(p17);
			(m_uchrData[18]) = unsigned char(p18);
			(m_uchrData[19]) = unsigned char(p19);
			(m_uchrData[20]) = unsigned char(p20);
			(m_uchrData[21]) = unsigned char(p21);
			(m_uchrData[22]) = unsigned char(p22);
			(m_uchrData[23]) = unsigned char(p23);
			(m_uchrData[24]) = unsigned char(p24);
			(m_uchrData[25]) = unsigned char(p25);
			(m_uchrData[26]) = unsigned char(p26);
			(m_uchrData[27]) = unsigned char(p27);
			(m_uchrData[28]) = unsigned char(p28);
			(m_uchrData[29]) = unsigned char(p29);
			(m_uchrData[30]) = unsigned char(p30);
			(m_uchrData[31]) = unsigned char(p31);
			return true;
		}catch(...){
			return false;
		};	

	};

	bool HtlGUID256::fromStdString( std::string & ptrRHS)
	{
		try{
		char chrBuf[256];
			int p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15;
			int p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31;
			strcpy(chrBuf, ptrRHS.c_str());
			sscanf_s(chrBuf,"%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X",
				&p0, &p1, &p2, &p3, &p4, &p5, &p6, &p7, &p8, &p9, &p10, &p11, &p12, &p13, &p14, &p15,
				&p16, &p17, &p18, &p19, &p20, &p21, &p22, &p23, &p24, &p25, &p26, &p27, &p28, &p29, &p30, &p31);

			(m_uchrData[0]) = unsigned char(p0);
			(m_uchrData[1]) = unsigned char(p1);
			(m_uchrData[2]) = unsigned char(p2);
			(m_uchrData[3]) = unsigned char(p3);
			(m_uchrData[4]) = unsigned char(p4);
			(m_uchrData[5]) = unsigned char(p5);
			(m_uchrData[6]) = unsigned char(p6);
			(m_uchrData[7]) = unsigned char(p7);
			(m_uchrData[8]) = unsigned char(p8);
			(m_uchrData[9]) = unsigned char(p9);
			(m_uchrData[10]) = unsigned char(p10);
			(m_uchrData[11]) = unsigned char(p11);
			(m_uchrData[12]) = unsigned char(p12);
			(m_uchrData[13]) = unsigned char(p13);
			(m_uchrData[14]) = unsigned char(p14);
			(m_uchrData[15]) = unsigned char(p15);
			(m_uchrData[16]) = unsigned char(p16);
			(m_uchrData[17]) = unsigned char(p17);
			(m_uchrData[18]) = unsigned char(p18);
			(m_uchrData[19]) = unsigned char(p19);
			(m_uchrData[20]) = unsigned char(p20);
			(m_uchrData[21]) = unsigned char(p21);
			(m_uchrData[22]) = unsigned char(p22);
			(m_uchrData[23]) = unsigned char(p23);
			(m_uchrData[24]) = unsigned char(p24);
			(m_uchrData[25]) = unsigned char(p25);
			(m_uchrData[26]) = unsigned char(p26);
			(m_uchrData[27]) = unsigned char(p27);
			(m_uchrData[28]) = unsigned char(p28);
			(m_uchrData[29]) = unsigned char(p29);
			(m_uchrData[30]) = unsigned char(p30);
			(m_uchrData[31]) = unsigned char(p31);
			return true;
		}catch(...){
			return false;
		};

	};

	bool HtlGUID256::fromCharString(const char* ptrRHS)
	{
		try{
			if(!ptrRHS){return false;};//safety code
			char chrBuf[256];
			int p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15;
			int p16, p17, p18, p19, p20, p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31;
			strcpy(chrBuf, ptrRHS);
			sscanf_s(chrBuf,"%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X-%02X%02X%02X%02X",
				&p0, &p1, &p2, &p3, &p4, &p5, &p6, &p7, &p8, &p9, &p10, &p11, &p12, &p13, &p14, &p15,
				&p16, &p17, &p18, &p19, &p20, &p21, &p22, &p23, &p24, &p25, &p26, &p27, &p28, &p29, &p30, &p31);

			(m_uchrData[0]) = unsigned char(p0);
			(m_uchrData[1]) = unsigned char(p1);
			(m_uchrData[2]) = unsigned char(p2);
			(m_uchrData[3]) = unsigned char(p3);
			(m_uchrData[4]) = unsigned char(p4);
			(m_uchrData[5]) = unsigned char(p5);
			(m_uchrData[6]) = unsigned char(p6);
			(m_uchrData[7]) = unsigned char(p7);
			(m_uchrData[8]) = unsigned char(p8);
			(m_uchrData[9]) = unsigned char(p9);
			(m_uchrData[10]) = unsigned char(p10);
			(m_uchrData[11]) = unsigned char(p11);
			(m_uchrData[12]) = unsigned char(p12);
			(m_uchrData[13]) = unsigned char(p13);
			(m_uchrData[14]) = unsigned char(p14);
			(m_uchrData[15]) = unsigned char(p15);
			(m_uchrData[16]) = unsigned char(p16);
			(m_uchrData[17]) = unsigned char(p17);
			(m_uchrData[18]) = unsigned char(p18);
			(m_uchrData[19]) = unsigned char(p19);
			(m_uchrData[20]) = unsigned char(p20);
			(m_uchrData[21]) = unsigned char(p21);
			(m_uchrData[22]) = unsigned char(p22);
			(m_uchrData[23]) = unsigned char(p23);
			(m_uchrData[24]) = unsigned char(p24);
			(m_uchrData[25]) = unsigned char(p25);
			(m_uchrData[26]) = unsigned char(p26);
			(m_uchrData[27]) = unsigned char(p27);
			(m_uchrData[28]) = unsigned char(p28);
			(m_uchrData[29]) = unsigned char(p29);
			(m_uchrData[30]) = unsigned char(p30);
			(m_uchrData[31]) = unsigned char(p31);
			return true;
		}catch(...){
			return false;
		};	

	};

	//!Sets the GUID to the NULL ID 00000000-00000000-00000000-00000000
	void HtlGUID256::setNull(void)
	{
		m_chrNull = '0';
		for(int i = 0; i < 32; i++)
		{
			m_uchrData[i] = NULL;
		};
	};

	bool HtlGUID256::isNull(void)
	{
		bool blnNull = true;
		for(int i = 0; i < 32; i++)
		{
			if(m_uchrData[i] != NULL)
			{
				blnNull = false;
			};
		};
		return blnNull;
	};

	//!Assignment Operator Overloads
	HtlGUID256 & HtlGUID256::operator= ( const GUID & ptrRHS )
	{
		//Windows GUID format check c5057190-a286-4427-b172-2fc56a92423f
		setNull();//zero pad the tail of the GUID
		char chrBuff[20];
		sprintf(chrBuff,"%08x",ptrRHS.Data1);//convert it to hexidecimal characters
		sscanf(chrBuff,"%02x%02x%02x%02x",
			&(m_uchrData[0]),
			&(m_uchrData[1]),
			&(m_uchrData[2]),
			&(m_uchrData[3]) );
		sprintf(chrBuff,"%04x",ptrRHS.Data2);//convert it to hexidecimal characters
		sscanf(chrBuff,"%02x%02x",
			&(m_uchrData[4]),
			&(m_uchrData[5]) );
		sprintf(chrBuff,"%04x",ptrRHS.Data3);//convert it to hexidecimal characters
		sscanf(chrBuff,"%02x%02x",
			&(m_uchrData[6]),
			&(m_uchrData[7]) );
		sprintf(chrBuff,"%012x",ptrRHS.Data4);//convert it to hexidecimal characters
		sscanf(chrBuff,"%02x%02x%02x%02x%02x%02x",
			&(m_uchrData[8]),
			&(m_uchrData[9]),
			&(m_uchrData[10]),
			&(m_uchrData[11]),
			&(m_uchrData[12]),
			&(m_uchrData[13]),
			&(m_uchrData[14]),
			&(m_uchrData[15]) );

		return *this;
	};

	HtlGUID256 &	HtlGUID256::operator= ( const HtlGUID256 & ptrRHS )
	{
		for(int i = 0; i < 32; i++)
		{
			m_uchrData[i] = ptrRHS[i];
		};
		return *this;
	};

	//!Boolean Logic Operator Overloads
	bool HtlGUID256::operator == (const HtlGUID256 & ptrRHS )
	{
		for(int i = 0; i < 32; i++)
		{
			if(m_uchrData[i] != ptrRHS[i]){return false;};
		};
		//made it all the way through
		return true;
	};

	bool HtlGUID256::operator != (const HtlGUID256 & ptrRHS )
	{
		for(int i = 0; i < 32; i++)
		{
			if(m_uchrData[i] != ptrRHS[i]){return true;};
		};
		//made it all the way through
		return false;
	};

	bool HtlGUID256::operator < (const HtlGUID256 & ptrRHS )
	{
		for(int i = 0; i < 32; i++)
		{
			if(m_uchrData[i] > ptrRHS[i]){return false;};
		};
		//made it all the way through
		return true;
	};

	bool HtlGUID256::operator > (const HtlGUID256 & ptrRHS )
	{
		for(int i = 0; i < 32; i++)
		{
			if(m_uchrData[i] < ptrRHS[i]){return false;};
		};
		//made it all the way through
		return true;
	};

	bool HtlGUID256::operator <= (const HtlGUID256 & ptrRHS )
	{
		for(int i = 0; i < 32; i++)
		{
			if(m_uchrData[i] > ptrRHS[i]){return false;};
		};
		//made it all the way through
		return true;
	};

	bool HtlGUID256::operator >= (const HtlGUID256 & ptrRHS )
	{
		for(int i = 0; i < 32; i++)
		{
			if(m_uchrData[i] < ptrRHS[i]){return false;};
		};
		//made it all the way through
		return true;
	};

	//!HTL Container Accessors
	const uchar & HtlGUID256::at(size_t i) const
	{

		if((i >= 0) && (i < 16))
		{
			return m_uchrData[i];
		}else{
			//invalid index return NULL
			return m_chrNull;
		};
		return m_chrNull;
	};
	uchar & HtlGUID256::at(size_t i)
	{

		if((i >= 0) && (i < 16))
		{
			return m_uchrData[i];
		}else{
			//invalid index return NULL
			return m_chrNull;
		};
		return m_chrNull;
	};
	const uchar & HtlGUID256::operator[](size_t i) const
	{
		if((i >= 0) && (i < 16))
		{
			return m_uchrData[i];
		}else{
			//invalid index return NULL
			return m_chrNull;
		};
		return m_chrNull;
	};
	uchar & HtlGUID256::operator[](size_t i)
	{
		if((i >= 0) && (i < 16))
		{
			return m_uchrData[i];
		}else{
			//invalid index return NULL
			return m_chrNull;
		};
		return m_chrNull;
	};

	//Windows GUID format check c5057190-a286-4427-b172-2fc56a92423f
	bool HtlGUID256::isValidWinGUID(const char * strInput)
	{
		if(!strInput){return false;};//safety code
		int i, intNumChars;
		intNumChars = strlen(strInput);
		if(intNumChars != 36)
		{//then wrong length GUID is 32 hex and 4 '-'
			return false;
		};
		//check the hyphen locations
		for(i = 0; i < intNumChars;i++)
		{
			if((i == 8) || (i == 13) || (i == 18) || (i == 23))
			{
				//then expect a hyphen
				if(strInput[i] != '-')
				{
					return false;
				};
			}else{
				//otherwise expect a hex
				if(isxdigit(strInput[i]) == 0)
				{
					//then not a hexidecimal digit
					return false;
				};
			};
		};
		//made it all the way through without kicking out false, must be a valid GUID
		return true;
	};

	//Windows GUID format check c5057190-a2864427-b1722fc5-6a92423f
	bool HtlGUID256::isValidHtlGUID(const char * strInput)
	{
		if(!strInput){return false;};//safety code
		int i, intNumChars;
		intNumChars = strlen(strInput);
		if(intNumChars != 36)
		{//then wrong length GUID is 32 hex and 4 '-'
			return false;
		};
		//check the hyphen locations
		for(i = 0; i < intNumChars;i++)
		{
			if((i == 8) || (i == 17) || (i == 26))
			{
				//then expect a hyphen
				if(strInput[i] != '-')
				{
					return false;
				};
			}else{
				//otherwise expect a hex
				if(isxdigit(strInput[i]) == 0)
				{
					//then not a hexidecimal digit
					return false;
				};
			};
		};
		//made it all the way through without kicking out false, must be a valid GUID
		return true;
	};

//!Method for generating a global unique identifier
	void HtlGUID256::createGUID256(void)
	{;
		for(int i = 0; i < 32; i++)
		{
			m_uchrData[i] = GetRNG()->intNextAB(0,255);
		};
	};

	HTL::HtlUniform * HtlGUID256::GetRNG(void)
	{
		static HTL::HtlUniform m_objRNG;
		return &m_objRNG;
	}


};//end HTL namespace

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The MIT License


Written By
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions