Index: src/ch/FileInfo.cpp
===================================================================
diff -u -N -r4ec3aef62d14193e3021e6bc3f8bcdf11770c7d5 -r860b25a7b72cd40f83d810f7c72a5e2a76f88987
--- src/ch/FileInfo.cpp	(.../FileInfo.cpp)	(revision 4ec3aef62d14193e3021e6bc3f8bcdf11770c7d5)
+++ src/ch/FileInfo.cpp	(.../FileInfo.cpp)	(revision 860b25a7b72cd40f83d810f7c72a5e2a76f88987)
@@ -514,6 +514,15 @@
 
 ///////////////////////////////////////////////////////////////////////
 // Array
+CFileInfoArray::CFileInfoArray(CClipboardArray& rClipboardArray) :
+	m_rClipboard(rClipboardArray)
+{
+}
+
+CFileInfoArray::~CFileInfoArray()
+{
+}
+
 void CFileInfoArray::AddFileInfo(const CFileInfoPtr& spFileInfo)
 {
 	boost::unique_lock<boost::shared_mutex> lock(m_lock);
@@ -554,3 +563,32 @@
 	boost::unique_lock<boost::shared_mutex> lock(m_lock);
 	m_vFiles.clear();
 }
+
+unsigned long long CFileInfoArray::CalculateTotalSize()
+{
+	unsigned long long ullSize = 0;
+
+	boost::shared_lock<boost::shared_mutex> lock(m_lock);
+	BOOST_FOREACH(CFileInfoPtr& spFileInfo, m_vFiles)
+	{
+		ullSize += spFileInfo->GetLength64();
+	}
+
+	return ullSize;
+}
+
+unsigned long long CFileInfoArray::CalculatePartialSize(size_t stCount)
+{
+	unsigned long long ullSize = 0;
+
+	boost::shared_lock<boost::shared_mutex> lock(m_lock);
+	if(stCount > m_vFiles.size())
+		THROW(_T("Invalid argument"), 0, 0, 0);
+
+	for(std::vector<CFileInfoPtr>::iterator iter = m_vFiles.begin(); iter != m_vFiles.begin() + stCount; ++iter)
+	{
+		ullSize += (*iter)->GetLength64();
+	}
+
+	return ullSize;
+}