Index: trunk/jenga/src/smoothie/Class.cpp
===================================================================
--- trunk/jenga/src/smoothie/Class.cpp	(revision 186)
+++ trunk/jenga/src/smoothie/Class.cpp	(revision 190)
@@ -310,5 +310,5 @@
 
 
-int Classes::hash(const char *name) const{
+int Classes::GetHashCode(const char *name) const{
 	int key;
 
@@ -377,5 +377,5 @@
 {
 	int key;
-	key=hash(name.c_str());
+	key=GetHashCode(name.c_str());
 
 	if( namespaceScopes.size() == 0 && name == "Object" ){
@@ -420,4 +420,33 @@
 }
 
+bool Classes::Insert( CClass *pClass )
+{
+	/////////////////////////////////
+	// ハッシュデータに追加
+	/////////////////////////////////
+
+	int key;
+	key=GetHashCode( pClass->GetName().c_str() );
+
+	if(pobj_ClassHash[key]){
+		CClass *pobj_c2;
+		pobj_c2=pobj_ClassHash[key];
+		while(1){
+			if( pobj_c2->IsEqualSymbol( *pClass ) ){
+				//名前空間及びクラス名が重複した場合
+				SmoothieException::Throw(15,pClass->GetName());
+				return false;
+			}
+
+			if(pobj_c2->pobj_NextClass==0) break;
+			pobj_c2=pobj_c2->pobj_NextClass;
+		}
+		pobj_c2->pobj_NextClass=pClass;
+	}
+	else{
+		pobj_ClassHash[key]=pClass;
+	}
+	return true;
+}
 CClass *Classes::Add( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, const char *name,int nowLine){
 	//////////////////////////////////////////////////////////////////////////
@@ -426,42 +455,20 @@
 	//////////////////////////////////////////////////////////////////////////
 
-	CClass *pobj_c = Create(namespaceScopes, importedNamespaces, name);
+	CClass *pClass = Create(namespaceScopes, importedNamespaces, name);
 
 	if(lstrcmp(name,"String")==0){
 		//Stringクラス
-		pStringClass=pobj_c;
+		pStringClass=pClass;
 	}
 	if( lstrcmp( name, "Object" ) == 0 ){
-		pObjectClass = pobj_c;
-	}
-
-
-	/////////////////////////////////
-	// ハッシュデータに追加
-	/////////////////////////////////
-
-	int key;
-	key=hash(name);
-
-	if(pobj_ClassHash[key]){
-		CClass *pobj_c2;
-		pobj_c2=pobj_ClassHash[key];
-		while(1){
-			if( pobj_c2->IsEqualSymbol( namespaceScopes, name ) ){
-				//名前空間及びクラス名が重複した場合
-				SmoothieException::Throw(15,name,nowLine);
-				return 0;
-			}
-
-			if(pobj_c2->pobj_NextClass==0) break;
-			pobj_c2=pobj_c2->pobj_NextClass;
-		}
-		pobj_c2->pobj_NextClass=pobj_c;
-	}
-	else{
-		pobj_ClassHash[key]=pobj_c;
-	}
-
-	return pobj_c;	
+		pObjectClass = pClass;
+	}
+
+	if( !Insert( pClass ) )
+	{
+		return NULL;
+	}
+
+	return pClass;	
 }
 
@@ -517,5 +524,6 @@
 //////////////////////
 
-void Classes::Iterator_Init(void){
+void Classes::Iterator_Init() const
+{
 	if(ppobj_IteClass) free(ppobj_IteClass);
 
@@ -540,12 +548,15 @@
 	}
 }
-void Classes::Iterator_Reset(void){
+void Classes::Iterator_Reset() const
+{
 	iIteNextNum = 0;
 }
-BOOL Classes::Iterator_HasNext(void){
+BOOL Classes::Iterator_HasNext() const
+{
 	if(iIteNextNum<iIteMaxNum) return 1;
 	return 0;
 }
-CClass *Classes::Iterator_GetNext(void){
+CClass *Classes::Iterator_GetNext() const
+{
 	CClass *pobj_c;
 	pobj_c=ppobj_IteClass[iIteNextNum];
@@ -553,5 +564,6 @@
 	return pobj_c;
 }
-int Classes::Iterator_GetMaxCount(void){
+int Classes::Iterator_GetMaxCount() const
+{
 	return iIteMaxNum;
 }
Index: trunk/jenga/src/smoothie/Source.cpp
===================================================================
--- trunk/jenga/src/smoothie/Source.cpp	(revision 186)
+++ trunk/jenga/src/smoothie/Source.cpp	(revision 190)
@@ -1,2 +1,4 @@
+#include <stdio.h>
+
 #include <boost/foreach.hpp>
 
