//
-// Open Service Platform
// Copyright (c) 2013 Samsung Electronics Co., Ltd.
//
// Licensed under the Apache License, Version 2.0 (the License);
namespace Tizen { namespace Io
{
_DataSetImpl::_DataSetImpl(void)
- :__rowCount(0)
+ : __columnCount(0)
+ , __rowCount(0)
+ , __pDataSet(null)
+ , __pColumnList(null)
+ , __pColumnTypeList(null)
{
-
}
_DataSetImpl::~_DataSetImpl(void)
{
-
+ for (int i = 0; i< __enumImplList.GetCount() ; i++)
+ (static_cast<_DataSetEnumeratorImpl*>(__enumImplList.GetAt(i)))->__dataSetDeleted = true;
+ for (int i = 0; i< __rowImplList.GetCount() ; i++)
+ (static_cast<_DataRowImpl*>(__rowImplList.GetAt(i)))->__dataSetDeleted = true;
+
+ delete __pDataSet;
+ delete __pColumnList;
+ delete __pColumnTypeList;
}
result
{
result r = E_SUCCESS;
- r = __columnList.Construct(columnNames);
- SysTryReturn(NID_IO, r == E_SUCCESS, E_INVALID_ARG, r, "[E_INVALID_ARG] columnNames is invalid.");
+ __pDataSet = new (std::nothrow) LinkedList(SingleObjectDeleter);
+ SysTryReturnResult(NID_IO, __pDataSet != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
+ __pColumnList = new (std::nothrow) ArrayList(SingleObjectDeleter);
+ SysTryReturnResult(NID_IO, __pColumnList != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
+ __pColumnTypeList = new (std::nothrow) ArrayList(SingleObjectDeleter);
+ SysTryReturnResult(NID_IO, __pColumnTypeList != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
- __columnCount = __columnList.GetCount();
- SysTryReturn(NID_IO, __columnCount > 0, E_INVALID_ARG, r, "[E_INVALID_ARG] column count is 0.");
+ __columnCount = columnNames.GetCount();
+ SysTryReturnResult(NID_IO, __columnCount > 0, E_INVALID_ARG, "column count is 0.");
- __columnTypeList.Construct(__columnCount);
+ r = __pColumnList->Construct(__columnCount);
+ SysTryReturn(NID_IO, r == E_SUCCESS, E_OUT_OF_MEMORY, r, "[E_OUT_OF_MEMORY] column list construct failed");
+ r = __pColumnTypeList->Construct(__columnCount);
+ SysTryReturn(NID_IO, r == E_SUCCESS, E_OUT_OF_MEMORY, r, "[E_OUT_OF_MEMORY] column type list construct failed");
for (int i = 0 ; i < __columnCount ; i++)
{
- result r = __columnTypeList.Add(new (std::nothrow) Integer(DB_COLUMNTYPE_NULL));
- SysTryReturn(NID_IO, r == E_SUCCESS, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient.");
+ r = __pColumnList->Add(new (std::nothrow) String(*(String*)(columnNames.GetAt(i))));
+ SysTryReturnResult(NID_IO, r == E_SUCCESS, E_OUT_OF_MEMORY, "The memory is insufficient.");
+
+ r = __pColumnTypeList->Add(new (std::nothrow) Integer(DB_COLUMNTYPE_NULL));
+ SysTryReturnResult(NID_IO, r == E_SUCCESS, E_OUT_OF_MEMORY, "The memory is insufficient.");
}
//SysLog(NID_IO, "column count is %d", __columnCount);
_DataSetImpl::CreateDataRowN(void)
{
result r;
- unique_ptr<ArrayList> pNewRowArrayList(new (std::nothrow) ArrayList);
+ unique_ptr<ArrayList> pNewRowArrayList(new (std::nothrow) ArrayList(SingleObjectDeleter));
SysTryReturn(NID_IO, pNewRowArrayList != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient.");
unique_ptr<DataRow> pDataRow(_DataRowImpl::CreateDataRowInstanceN(__columnCount, pNewRowArrayList.get()));
SysTryReturn(NID_IO, pDataRow != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient.");
- r = __dataSet.Add(pNewRowArrayList.release());
+ r = __pDataSet->Add(pNewRowArrayList.release());
SysTryReturn(NID_IO, r == E_SUCCESS, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Add Row to DataSet is failed");
- _DataRowImpl::GetInstance(*pDataRow)->__pColumnTypeList = &__columnTypeList;
+ _DataRowImpl::GetInstance(*pDataRow)->__pColumnTypeList = __pColumnTypeList;
+
+ r = __rowImplList.Add(_DataRowImpl::GetInstance(*pDataRow));
+ SysTryReturn(NID_IO, r == E_SUCCESS, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Add to LinkedList Falied");
+
+ _DataRowImpl::GetInstance(*pDataRow)->__pRowImplList = &__rowImplList;
- __rowCount = __dataSet.GetCount();
+ __rowCount = __pDataSet->GetCount();
//SysLog(NID_IO, "row count is %d", __rowCount);
return pDataRow.release();
DataSetEnumerator*
_DataSetImpl::GetDataSetEnumeratorN(void)
{
+ result r;
+
unique_ptr<DataSetEnumerator> pDataSetEnum(_DataSetEnumeratorImpl::CreateDataSetEnumeratorInstanceN());
- _DataSetEnumeratorImpl::GetInstance(*pDataSetEnum)->__pDataSet = &__dataSet;
- _DataSetEnumeratorImpl::GetInstance(*pDataSetEnum)->__pColumnList = &__columnList;
+ _DataSetEnumeratorImpl::GetInstance(*pDataSetEnum)->__pDataSet = __pDataSet;
+ _DataSetEnumeratorImpl::GetInstance(*pDataSetEnum)->__pColumnList = __pColumnList;
_DataSetEnumeratorImpl::GetInstance(*pDataSetEnum)->__columnCount = __columnCount;
_DataSetEnumeratorImpl::GetInstance(*pDataSetEnum)->__rowCount = __rowCount;
//SysLog(NID_IO, "row count is %d, column count is %d", __rowCount, __columnCount);
+ r = __enumImplList.Add(_DataSetEnumeratorImpl::GetInstance(*pDataSetEnum));
+ SysTryReturn(NID_IO, r == E_SUCCESS, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Add to LinkedList Falied");
+
+ _DataSetEnumeratorImpl::GetInstance(*pDataSetEnum)->__pEnumImplList = &__enumImplList;
+
return pDataSetEnum.release();
}
_DataSetImpl::CloneN(void) const
{
result r;
+
unique_ptr< DataSet > pDataSet(new (std::nothrow) DataSet());
SysTryReturn(NID_IO, pDataSet != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient.");
- pDataSet->Construct(__columnList);
+ pDataSet->Construct(*__pColumnList);
+
+ for (int i = 0; i < __columnCount; i++)
+ {
+ r = _DataSetImpl::GetInstance(*pDataSet)->__pColumnTypeList->SetAt(new Integer(*(Integer*)__pColumnTypeList->GetAt(i)), i);
+ SysTryReturn(NID_IO, r == E_SUCCESS, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] ColumnTypeList Copy Falied");
+ }
for (int i = 0; i < __rowCount; i++)
{
DataRow* pNewRow = pDataSet->CreateDataRowN();
- r = _DataRowImpl::GetInstance(*pNewRow)->Clone((const ArrayList*)(__dataSet.GetAt(i)));
+ r = _DataRowImpl::GetInstance(*pNewRow)->Clone((const ArrayList*)(__pDataSet->GetAt(i)));
delete pNewRow;
SysTryReturn(NID_IO, r == E_SUCCESS, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] DataRow Clone Falied");
for (int i = 0; i < __rowCount; i++)
{
- const ArrayList* pDataRowArrayList = static_cast<const ArrayList*>(__dataSet.GetAt(i));
+ const ArrayList* pDataRowArrayList = static_cast<const ArrayList*>(__pDataSet->GetAt(i));
hash += _DataRowImpl::GetHashCode(pDataRowArrayList);
}
return hash;
}
+_DataSetImpl*
+_DataSetImpl::GetInstance(DataSet& dataSet)
+{
+ return dataSet.__pDataSetImpl;
+}
+
+const _DataSetImpl*
+_DataSetImpl::GetInstance(const DataSet& dataSet)
+{
+ return dataSet.__pDataSetImpl;
+}
+
}} // Tizen::Io