Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

O3DBIRecord.cpp

Go to the documentation of this file.
00001 
00011 #include "O3DBIRecord.h"
00012 #include "O3DBIException.h"
00013 #include "O3DBIError.h"
00014 #include <algorithm>            // Std lib algorithms
00015 
00016 // ----------------------------------------------------------------------------
00017 // O3DBIRecord construction/destruction
00018 
00019 O3DBIRecord::O3DBIRecord()
00020 {
00021 
00022 }
00023 
00024 O3DBIRecord::O3DBIRecord(const O3DBIRecord& record)
00025 {
00026     _fields = record._fields;
00027 }
00028 
00029 O3DBIRecord::O3DBIRecord(TDataFieldsConstIter& first,
00030                          TDataFieldsConstIter& last)
00031 {
00032     _fields.reserve(last - first);
00033     std::copy(first, last, _fields.begin());    
00034 }
00035 
00036 O3DBIRecord::~O3DBIRecord()
00037 {
00038 
00039 }
00040 
00041 // ----------------------------------------------------------------------------
00042 // O3DBIRecord operations
00043 
00044 bool O3DBIRecord::operator==(const O3DBIRecord& other) const
00045 {
00046     if (_fields.size() != other._fields.size())
00047         return false;
00048     return std::equal(_fields.begin(), _fields.end(), other._fields.begin());
00049 }
00050 
00051 TDataFieldIndex O3DBIRecord::InsertField(const O3DBIDataField& field)
00052 {
00053     _fields.push_back(field);
00054     return (_fields.size() - 1);
00055 }
00056 
00057 O3DBIDataField O3DBIRecord::GetField(TDataFieldIndex index) const
00058 {
00059     if (index >= _fields.size())
00060         throw new O3DBIException(O3DBI_INDEX_OUTOFBOUNDS,
00061         O3DBIErrorTxt::pchIndexOutOfBounds, _T("O3DBIRecord::GetField"), this);
00062     return _fields[index];
00063 }
00064 
00065 O3DBIDataField& O3DBIRecord::operator[](TDataFieldIndex index)
00066 {
00067     if (index >= _fields.size())
00068         throw new O3DBIException(O3DBI_INDEX_OUTOFBOUNDS,
00069         O3DBIErrorTxt::pchIndexOutOfBounds, _T("O3DBIRecord::operator[]"),
00070         this);
00071     return _fields[index];
00072 }
00073 
00074 TO3DBIResult O3DBIRecord::RemoveField(const O3DBIDataField& field)
00075 {
00076     TDataFieldsIter iter = std::find(_fields.begin(), _fields.end(), field);
00077     if (iter != _fields.end())
00078     {
00079         _fields.erase(iter);
00080         return OSUCCESS;
00081     } else {
00082         return OFAILED;
00083     }
00084 }
00085 
00086 TO3DBIResult O3DBIRecord::RemoveField(TDataFieldIndex index)
00087 {
00088     if (index >= _fields.size())
00089         throw new O3DBIException(O3DBI_INDEX_OUTOFBOUNDS,
00090         O3DBIErrorTxt::pchIndexOutOfBounds, _T("O3DBIRecord::RemoveField"),
00091         this);
00092     return RemoveField((*this)[index]);
00093 }
00094 
00095 TDataFields& O3DBIRecord::GetFields()
00096 {
00097     return _fields;
00098 }
00099 
00100 TDataFieldsSize O3DBIRecord::GetFieldCount() const
00101 {
00102     return _fields.size();
00103 }
00104 
00105 void O3DBIRecord::CancelModified()
00106 {
00107     TDataFieldsIter iter = _fields.begin();
00108     while (iter != _fields.end())
00109     {
00110         (*iter).CancelModified();
00111         ++iter;
00112     }
00113 }
00114 
00115 bool O3DBIRecord::IsModified() const
00116 {
00117     TDataFieldsConstIter iter = _fields.begin();
00118     while (iter != _fields.end() && ! (*iter).IsModified())
00119         ++iter;
00120     return (iter != _fields.end());
00121 }
00122 
00123 TO3DBIString O3DBIRecord::ToString() const
00124 {
00125     _TCHAR buffer[512];
00126     int p;
00127     p = ::_stprintf(buffer, _T("O3DBIRecord at: 0x%x\n"), this);
00128     if (_fields.size() == 0)
00129     {
00130         ::_tcscpy(buffer + p, _T("\t<contains no data fields>\n"));
00131         return TO3DBIString(buffer);
00132     }
00133     TO3DBIString str;
00134     str += _T("\t");
00135     TDataFieldsConstIter iter = _fields.begin();
00136     while (iter != _fields.end())
00137     {
00138         str += (*iter).ToString();
00139         ++iter;
00140     }
00141     return str;
00142 }



SourceForge.net Logo Generated on Sun Jan 23 11:36:34 2005 for Oracle Object Oriented Database Interface (O3DBI) by  doxygen 1.3.9.1