List of all members.
Detailed Description
Definition at line 25 of file directory.
Constructor & Destructor Documentation
inlib::wroot::directory::directory |
( |
ifile & |
a_file | ) |
[inline] |
inlib::wroot::directory::directory |
( |
ifile & |
a_file, |
|
|
const std::string & |
a_name, |
|
|
const std::string & |
a_title |
|
) |
| [inline] |
inlib::wroot::directory::directory |
( |
ifile & |
a_file, |
|
|
directory * |
a_parent, |
|
|
const std::string & |
a_name, |
|
|
const std::string & |
a_title |
|
) |
| [inline] |
Definition at line 92 of file directory.
:m_file(a_file)
,m_parent(a_parent)
,m_is_valid(false)
,m_name(a_name)
,m_title(a_title)
,m_nbytes_keys(0)
,m_nbytes_name(0)
,m_seek_directory(0)
,m_seek_parent(0)
,m_seek_keys(0)
{
#ifdef INLIB_MEM
mem::increment(s_class().c_str());
#endif
m_date_C = get_date();
m_date_M = get_date();
if(m_name.empty()) {
m_file.out() << "inlib::wroot::directory::directory :"
<< " directory name cannot be \"\"."
<< std::endl;
return;
}
if(m_name.find('/')!=std::string::npos) {
m_file.out() << "inlib::wroot::directory::directory :"
<< " directory name " << sout(m_name)
<< " cannot contain a slash."
<< std::endl;
return;
}
if(m_title.empty()) m_title = m_name;
if(m_parent->find_key(m_name)) {
m_file.out() << "inlib::wroot::directory::directory :"
<< " directory " << sout(m_name) << " exists already."
<< std::endl;
return;
}
m_seek_parent = m_parent->seek_directory();
uint32 nbytes = record_size();
wroot::key* key =
new wroot::key(m_file,m_parent->seek_directory(),
m_name,m_title,"TDirectory",nbytes);
m_nbytes_name = key->key_length();
m_seek_directory = key->seek_key();
if(!m_seek_directory) {
m_file.out() << "inlib::wroot::directory::directory :"
<< " bad key."
<< std::endl;
delete key;
return;
}
{char* buffer = key->data_buffer();
wbuf wb(m_file.out(),m_file.byte_swap(),key->eob(),buffer);
if(!to_buffer(wb)) {
m_file.out() << "inlib::wroot::directory::directory :"
<< " directory name " << sout(m_name)
<< " cannot fill buffer."
<< std::endl;
delete key;
return;
}}
uint16 cycle = m_parent->append_key(key);
key->set_cycle(cycle);
if(!key->write_self()) {
m_file.out() << "inlib::wroot::directory::directory :"
<< " key.write_self() failed."
<< std::endl;
return;
}
uint32 n;
if(!key->write_file(n)) {
m_file.out() << "inlib::wroot::directory::directory :"
<< " directory name " << sout(m_name)
<< " cannot write key to file."
<< std::endl;
return;
}
m_is_valid = true;
}
virtual inlib::wroot::directory::~directory |
( |
| ) |
[inline, virtual] |
inlib::wroot::directory::directory |
( |
const directory & |
a_from | ) |
[inline, protected] |
Member Function Documentation
uint16 inlib::wroot::directory::append_key |
( |
key * |
a_key | ) |
[inline, protected] |
Definition at line 390 of file directory.
{
std::list<key*>::iterator itk;
for(itk=m_keys.begin();itk!=m_keys.end();++itk) {
if((*itk)->object_name()==a_key->object_name()) {
m_keys.insert(itk,a_key);
return ((*itk)->cycle() + 1);
}
}
m_keys.push_back(a_key);
return 1;
}
virtual void inlib::wroot::directory::append_object |
( |
iobject * |
a_object | ) |
[inline, virtual] |
void inlib::wroot::directory::clear_dirs |
( |
| ) |
[inline, protected] |
void inlib::wroot::directory::clear_keys |
( |
| ) |
[inline, protected] |
Definition at line 335 of file directory.
{
std::list<key*>::iterator it;
for(it=m_keys.begin();it!=m_keys.end();) {
key* k = *it;
it = m_keys.erase(it);
delete k;
}
m_keys.clear();
}
void inlib::wroot::directory::clear_objs |
( |
| ) |
[inline, protected] |
bool inlib::wroot::directory::close |
( |
| ) |
[inline] |
virtual ifile& inlib::wroot::directory::file |
( |
| ) |
[inline, virtual] |
key* inlib::wroot::directory::find_key |
( |
const std::string & |
a_name | ) |
[inline, protected] |
Definition at line 372 of file directory.
{
if(m_file.verbose()) {
m_file.out() << "inlib::wroot::directory::find_key :"
<< " " << sout(a_name) << " ..."
<< std::endl;
}
std::list<key*>::const_iterator it;
for(it=m_keys.begin();it!=m_keys.end();++it) {
if((*it)->object_name()==a_name) return *it;
}
return 0;
}
bool inlib::wroot::directory::is_valid |
( |
| ) |
const [inline] |
directory* inlib::wroot::directory::mkdir |
( |
const std::string & |
a_name, |
|
|
const std::string & |
a_title = "" |
|
) |
| [inline] |
Definition at line 206 of file directory.
{
if(a_name.empty()) {
m_file.out() << "inlib::wroot::directory::mkdir :"
<< " directory name cannot be \"\"."
<< std::endl;
return 0;
}
if(a_name.find('/')!=std::string::npos) {
m_file.out() << "inlib::wroot::directory::mkdir :"
<< " " << sout(a_name)
<< " cannot contain a slash."
<< std::endl;
return 0;
}
directory* dir =
new directory(m_file,this,a_name,a_title.empty()?a_name:a_title);
if(!dir->is_valid()) {
m_file.out() << "inlib::wroot::directory::mkdir :"
<< " directory badly created."
<< std::endl;
delete dir;
return 0;
}
m_dirs.push_back(dir);
return dir;
}
uint32 inlib::wroot::directory::record_size |
( |
| ) |
const [inline] |
static const std::string& inlib::wroot::directory::s_class |
( |
| ) |
[inline, static] |
Definition at line 28 of file directory.
{
static const std::string s_v("inlib::wroot::directory");
return s_v;
}
bool inlib::wroot::directory::save |
( |
| ) |
[inline, protected] |
Definition at line 345 of file directory.
{
if(!save_self()) return false;
{std::vector<directory*>::iterator it;
for(it=m_dirs.begin();it!=m_dirs.end();++it) {
if(!(*it)->save()) return false;
}}
return true;
}
bool inlib::wroot::directory::save_self |
( |
| ) |
[inline, protected] |
virtual seek inlib::wroot::directory::seek_directory |
( |
| ) |
const [inline, virtual] |
seek inlib::wroot::directory::seek_keys |
( |
| ) |
const [inline, protected] |
void inlib::wroot::directory::set_nbytes_name |
( |
uint32 |
a_n | ) |
[inline] |
void inlib::wroot::directory::set_seek_directory |
( |
seek |
a_seek | ) |
[inline] |
static std::string inlib::wroot::directory::sout |
( |
const std::string & |
a_string | ) |
[inline, static, protected] |
Definition at line 558 of file directory.
{
return std::string("\"")+a_string+"\"";
}
bool inlib::wroot::directory::to_buffer |
( |
wbuf & |
a_wb | ) |
[inline] |
bool inlib::wroot::directory::write |
( |
uint32 & |
a_nbytes | ) |
[inline] |
Definition at line 284 of file directory.
{
a_nbytes = 0;
if(m_file.verbose()) {
m_file.out() << "inlib::wroot::directory::write :"
<< " " << sout(m_name)
<< " : " << long2s(m_dirs.size())
<< " : " << long2s(m_objs.size())
<< " objects."
<< std::endl;
}
uint32 nbytes = 0;
{std::vector<directory*>::iterator it;
for(it=m_dirs.begin();it!=m_dirs.end();++it) {
uint32 n;
if(!(*it)->write(n)) return false;
nbytes += n;
}}
{std::vector<iobject*>::iterator it;
for(it=m_objs.begin();it!=m_objs.end();++it) {
uint32 n;
if(!write_object(*(*it),n)) {
m_file.out() << "inlib::wroot::directory::write :"
<< " for directory " << sout(m_name)
<< ", write_object " << sout((*it)->name())
<< " failed."
<< std::endl;
return false;
}
nbytes += n;
}}
if(!save_self()) {
m_file.out() << "inlib::wroot::directory::write :"
<< " for directory " << sout(m_name)
<< ", save_self failed."
<< std::endl;
return false;
}
a_nbytes = nbytes;
return true;
}
bool inlib::wroot::directory::write_header |
( |
| ) |
[inline, protected] |
bool inlib::wroot::directory::write_keys |
( |
| ) |
[inline, protected] |
Definition at line 403 of file directory.
{
uint32 nkeys = m_keys.size();
uint32 nbytes = sizeof(nkeys);
{std::list<key*>::iterator it;
for(it=m_keys.begin();it!=m_keys.end();++it) {
nbytes += (*it)->key_length();
}}
key headerkey(m_file,m_seek_directory,
m_name,m_title,"TDirectory",nbytes);
if(!headerkey.seek_key()) return false;
{char* buffer = headerkey.data_buffer();
wbuf wb(m_file.out(),m_file.byte_swap(),headerkey.eob(),buffer);
if(!wb.write(nkeys)) return false;
{std::list<key*>::iterator it;
for(it=m_keys.begin();it!=m_keys.end();++it) {
if(!((*it)->to_buffer(wb))) return false;
}}}
m_seek_keys = headerkey.seek_key();
m_nbytes_keys = headerkey.number_of_bytes();
if(m_file.verbose()) {
m_file.out() << "inlib::wroot::directory::write_keys :"
<< " write header key"
<< " " << sout(m_name)
<< " " << sout(m_title)
<< " (" << nkeys
<< ", " << nbytes
<< ", " << m_seek_keys
<< ", " << m_nbytes_keys
<< "):"
<< std::endl;
}
headerkey.set_cycle(1);
if(!headerkey.write_self()) {
m_file.out() << "inlib::wroot::directory::write_keys :"
<< " key.write_self() failed."
<< std::endl;
return false;
}
uint32 n;
return headerkey.write_file(n);
}
bool inlib::wroot::directory::write_object |
( |
iobject & |
a_obj, |
|
|
uint32 & |
a_nbytes |
|
) |
| [inline, protected] |
Definition at line 493 of file directory.
{
buffer bref(m_file.out(),m_file.byte_swap(),256*128);
if(!a_obj.stream(bref)) {
m_file.out() << "inlib::wroot::directory::write_object :"
<< " cannot stream object of store class name "
<< " " << sout(a_obj.store_class_name()) << "."
<< std::endl;
a_nbytes = 0;
return false;
}
std::string name = a_obj.name();
strip(name);
wroot::key* key = new wroot::key(m_file,m_seek_directory,
name,
a_obj.title(),a_obj.store_class_name(),
bref.length());
if(!key->seek_key()) {
delete key;
return false;
}
if(!bref.displace_mapped(key->key_length())) {
delete key;
return false;
}
char* kbuf = 0;
uint32 klen = 0;
bool kdelete = false;
m_file.compress_buffer(bref,kbuf,klen,kdelete);
::memcpy(key->data_buffer(),kbuf,klen);
if(kdelete) delete [] kbuf;
{uint32 nkey = key->key_length()+klen;
m_file.set_END(key->seek_key()+nkey);
key->set_number_of_bytes(nkey);}
uint16 cycle = append_key(key);
key->set_cycle(cycle);
if(!key->write_self()) {
m_file.out() << "inlib::wroot::directory::write_object :"
<< " key.write_self() failed."
<< std::endl;
return false;
}
if(m_file.verbose()) {
m_file.out() << "inlib::wroot::directory::_write_buffer :"
<< " " << sout(a_obj.name()) << "."
<< std::endl;
}
return key->write_file(a_nbytes);
}
Member Data Documentation
The documentation for this class was generated from the following file:
- /Users/barrand/private/dev/softinex/old/inexlib-1.2/inlib/inlib/wroot/directory