Click here to Skip to main content
15,897,273 members
Articles / Programming Languages / C++

A Namespace Extension Toolkit

Rate me:
Please Sign up or sign in to vote.
4.78/5 (10 votes)
21 Mar 2006CPOL12 min read 85K   1.7K   42  
This article shows you how to build your own Windows Explorer interfaces to custom data.
/*
 Copyright 2005 Chad Yoshikawa
 http://www.ececs.uc.edu/~yoshikco
 yoshikco@ececs.uc.edu

 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.

 This program 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 General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

*/

#include "stdafx.h"
#include "GalaxyUtils.h"


LPSTR CGalaxyUtils::ConvertWideToMultiByte(LPWSTR s) {
	size_t length = (wcslen(s)+1)*sizeof(OLECHAR);
	char *dest = new char[length];
	wcstombs(dest,s,length);
	return dest; // to be freed by caller
}

void CGalaxyUtils::FreeString(LPSTR s) {
	delete[] s;
} 


double CGalaxyUtils::TraceTime(const char* msg) {
	double time = getRawTime();
	TimeStampedMessage t(msg,time);
	myMessages.push_back(t);
	if (myMessages.size() > MAX_NUM_MESSAGES) {
		PrintTrace(); // have to flush things
	}
	return (time);
}

std::vector<TimeStampedMessage> CGalaxyUtils::myMessages;


void CGalaxyUtils::PrintTrace(bool send_to_stdout) {
	
	
	for (unsigned int i=0;i<myMessages.size();i++) {
		TimeStampedMessage t = myMessages[i];
		if (send_to_stdout) {
			printf("%lf %s\n",t.Time,t.Message.c_str());
		} else {
			AtlTrace2(atlTraceGalaxy,0,"%lf %s\n",t.Time,t.Message.c_str());
		}
	}
	myMessages.clear();
}

void CGalaxyUtils::ClearTrace() {
	myMessages.clear();
}

// declaring space for the static variable...
double CGalaxyUtils::m_scale=0;



	// initialize the timer code
void CGalaxyUtils::InitTimers() {
	LARGE_INTEGER freq;
	if (CGalaxyUtils::m_scale == 0) {
		QueryPerformanceFrequency(&freq); // do this once
		CGalaxyUtils::m_scale = 1000.0/freq.QuadPart;
	}
}
	
	// return the raw time in ms since the system started
double CGalaxyUtils::getRawTime() {
	LARGE_INTEGER time;
	QueryPerformanceCounter(&time);
	return time.QuadPart*CGalaxyUtils::m_scale;
}

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 Code Project Open License (CPOL)


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