diff -r a912c065719f -r 676c3b826f13 extensions/structs/Struct.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extensions/structs/Struct.cpp Fri Aug 08 00:17:37 2008 +0000 @@ -0,0 +1,108 @@ +/** +* vim: set ts=4 : +* ============================================================================= +* SourceMod Sample Extension +* Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. +* ============================================================================= +* +* This program is free software; you can redistribute it and/or modify it under +* the terms of the GNU General Public License, version 3.0, as published by the +* Free Software Foundation. +* +* 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, see . +* +* As a special exception, AlliedModders LLC gives you permission to link the +* code of this program (as well as its derivative works) to "Half-Life 2," the +* "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software +* by the Valve Corporation. You must obey the GNU General Public License in +* all respects for all other code used. Additionally, AlliedModders LLC grants +* this exception to all derivative works. AlliedModders LLC defines further +* exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), +* or . +* +* Version: $Id$ +*/ + +#include "Struct.h" + +bool StructInfo::getOffset( const char *member, int *offset ) +{ + MemberInfo **pInfo = members.retrieve(member); + + if (pInfo == NULL) + { + return false; + } + + *offset = (*pInfo)->offset; + + return true; +} + +bool StructInfo::getType( const char *member, MemberType*type ) +{ + MemberInfo **pInfo = members.retrieve(member); + + if (pInfo == NULL) + { + return false; + } + + *type = (*pInfo)->type; + + return true; +} + +bool StructInfo::getSize( const char *member, int *size ) +{ + MemberInfo **pInfo = members.retrieve(member); + + if (pInfo == NULL) + { + return false; + } + + *size = (*pInfo)->size; + + return true; +} + +void StructInfo::AddMember( const char *name, MemberInfo *member ) +{ + members.insert(name, member); + membersList.push_back(member); +} + +StructInfo::~StructInfo() +{ + SourceHook::List::iterator iter; + + iter = membersList.begin(); + + while (iter != membersList.end()) + { + delete (MemberInfo *)*iter; + iter = membersList.erase(iter); + } + + members.clear(); +} + +StructInfo::StructInfo() +{ + name[0] = 0; + size = -1; +} +MemberInfo::MemberInfo() +{ + name[0] = 0; + size = -1; + type = Member_Unknown; + offset = -1; +}