void glretrace::retrace_call_cgl(Trace::Call &call) {
- const char *name = call.name().c_str();
+ const char *name = call.name();
if (strcmp(name, "CGLSetCurrentContext") == 0) {
retrace_CGLSetCurrentContext(call);
}
void glretrace::retrace_call_glx(Trace::Call &call) {
- const char *name = call.name().c_str();
+ const char *name = call.name();
switch (name[3]) {
case 'C':
Trace::Call *call;
while ((call = parser.parse_call())) {
- const std::string &name = call->name();
+ const char *name = call->name();
if (retrace::verbosity >= 1) {
std::cout << *call;
}
void glretrace::retrace_call_wgl(Trace::Call &call) {
- const char *name = call.name().c_str();
+ const char *name = call.name();
switch (name[0]) {
case 'g':
self.retrace_function(function)
print 'void retrace::retrace_call(Trace::Call &call) {'
- print ' const char *name = call.name().c_str();'
+ print ' const char *name = call.name();'
print
func_dict = dict([(function.name, function) for function in functions])
// string cast
const char * Value ::toString(void) const { assert(0); return NULL; }
const char * Null ::toString(void) const { return NULL; }
-const char * String::toString(void) const { return value.c_str(); }
+const char * String::toString(void) const { return value; }
// virtual Value::visit()
void visit(String *node) {
os << literal << "\"";
- for (std::string::const_iterator it = node->value.begin(); it != node->value.end(); ++it) {
+ for (const char *it = node->value; *it; ++it) {
unsigned char c = (unsigned char) *it;
if (c == '\"')
os << "\\\"";
#include <assert.h>
-#include <string>
#include <map>
#include <list>
#include <vector>
class Visitor;
-class Dumper;
-class UInt;
class Value
class String : public Value
{
public:
- String(std::string _value) : value(_value) {}
+ String(const char * _value) : value(_value) {}
bool toBool(void) const;
const char *toString(void) const;
void visit(Visitor &visitor);
- std::string value;
+ const char * value;
};
class Enum : public Value
{
public:
- struct Signature : public std::pair<std::string, Value *>
+ struct Signature : public std::pair<const char *, Value *>
{
Signature()
- : std::pair<std::string, Value *>()
+ : std::pair<const char *, Value *>()
{}
- Signature(const std::string &n, Trace::Value *val)
- : std::pair<std::string, Value *>(n, val)
+ Signature(const char *n, Trace::Value *val)
+ : std::pair<const char *, Value *>(n, val)
{}
~Signature()
{
class Bitmask : public UInt
{
public:
- typedef std::pair<std::string, unsigned long long> Pair;
+ typedef std::pair<const char *, unsigned long long> Pair;
typedef std::vector<Pair> Signature;
Bitmask(const Signature *_sig, unsigned long long _value) : UInt(_value), sig(_sig) {}
{
public:
struct Signature {
- std::string name;
- std::vector<std::string> member_names;
+ const char *name;
+ std::vector<const char *> member_names;
};
Struct(Signature *_sig) : sig(_sig), members(_sig->member_names.size()) { }
{
public:
struct Signature {
- std::string name;
- std::vector<std::string> arg_names;
+ const char * name;
+ std::vector<const char *> arg_names;
};
unsigned no;
Call(Signature *_sig) : sig(_sig), args(_sig->arg_names.size()), ret(0) { }
~Call();
- inline const std::string & name(void) const {
+ inline const char * name(void) const {
return sig->name;
}
size_t id = read_uint();
Enum::Signature *sig = lookup(enums, id);
if (!sig) {
- std::string name = read_string();
+ const char *name = read_string();
Value *value = parse_value();
sig = new Enum::Signature(name, value);
enums[id] = sig;
}
-std::string Parser::read_string(void) {
+const char * Parser::read_string(void) {
size_t len = read_uint();
- if (!len) {
- return std::string();
+ char * value = new char[len + 1];
+ if (len) {
+ gzread(file, value, (unsigned)len);
}
- char * buf = new char[len];
- gzread(file, buf, (unsigned)len);
- std::string value(buf, len);
- delete [] buf;
+ value[len] = 0;
#if TRACE_VERBOSE
std::cerr << "\tSTRING \"" << value << "\"\n";
#endif
#include <iostream>
#include <list>
-#include <string>
#include "trace_format.hpp"
#include "trace_model.hpp"
Value *parse_opaque();
- std::string read_string(void);
+ const char * read_string(void);
unsigned long long read_uint(void);