extensions/structs/StructManager.cpp
author Nicholas Hastings <skamonkey@gmail.com>
Tue Apr 30 15:38:15 2013 -0400 (2013-04-30)
changeset 3904 80e6b940f702
parent 2224 676c3b826f13
permissions -rw-r--r--
Backed out changeset: 7d07b4f23cd0.
     1 /**
     2 * vim: set ts=4 :
     3 * =============================================================================
     4 * SourceMod Sample Extension
     5 * Copyright (C) 2004-2008 AlliedModders LLC.  All rights reserved.
     6 * =============================================================================
     7 *
     8 * This program is free software; you can redistribute it and/or modify it under
     9 * the terms of the GNU General Public License, version 3.0, as published by the
    10 * Free Software Foundation.
    11 * 
    12 * This program is distributed in the hope that it will be useful, but WITHOUT
    13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
    14 * FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
    15 * details.
    16 *
    17 * You should have received a copy of the GNU General Public License along with
    18 * this program.  If not, see <http://www.gnu.org/licenses/>.
    19 *
    20 * As a special exception, AlliedModders LLC gives you permission to link the
    21 * code of this program (as well as its derivative works) to "Half-Life 2," the
    22 * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software
    23 * by the Valve Corporation.  You must obey the GNU General Public License in
    24 * all respects for all other code used.  Additionally, AlliedModders LLC grants
    25 * this exception to all derivative works.  AlliedModders LLC defines further
    26 * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007),
    27 * or <http://www.sourcemod.net/license.php>.
    28 *
    29 * Version: $Id$
    30 */
    31 
    32 #include "StructManager.h"
    33 #include "extension.h"
    34 
    35 StructManager g_StructManager;
    36 
    37 void StructManager::AddStruct( const char *name, StructInfo *str )
    38 {
    39 	structs.insert(name, str);
    40 	structsList.push_back(str);
    41 }
    42 
    43 StructManager::~StructManager()
    44 {
    45 	SourceHook::List<StructInfo *>::iterator iter;
    46 
    47 	iter = structsList.begin();
    48 
    49 	while (iter != structsList.end())
    50 	{
    51 		delete (MemberInfo *)*iter;
    52 		iter = structsList.erase(iter);
    53 	}
    54 
    55 	structs.clear();
    56 }
    57 
    58 Handle_t StructManager::CreateStructHandle( const char *type, void *str )
    59 {
    60 	StructInfo **pInfo = structs.retrieve(type);
    61 
    62 	if (pInfo == NULL)
    63 	{
    64 		return BAD_HANDLE;
    65 	}
    66 
    67 	StructHandle *pHandle = new StructHandle;
    68 
    69 	pHandle->canDelete = false;
    70 	pHandle->data = str;
    71 	pHandle->info = *pInfo;
    72 
    73 	return handlesys->CreateHandle(g_StructHandle, 
    74 		pHandle, 
    75 		NULL, 
    76 		myself->GetIdentity(), 
    77 		NULL);
    78 }