IniSection Class Reference

#include <IniFile.h>

Inheritance diagram for IniSection:
IniBase

List of all members.

Public Member Functions

 IniSection (const char *u)
 IniSection (const IniParser *p)
 IniSection (const IniSection &s)
void operator= (const IniSection &s)
virtual ~IniSection ()
 IniSection (const IniParser *p, string n)
void initValue (const string &key, const string &val, const string &comment, int rb)
IniSectioninitSection (const string &name, const string &comment, int rb, int wb=-2)
void initReadBy ()
void setRewriteBy (int c)
int getRewriteBy ()
int getSubSectionRewriteBy (const char *name)
void setEndComment (const char *c)
const char * getEndComment () const
bool isDirty ()
virtual void clean ()
IniSectionfindSection (const vector< string > &path, int from=0)
int findEndFromUp (const vector< string > &path, int wanted, int found=-1, int from=0)
void Dump ()
int Read (const YCPPath &p, YCPValue &out, bool rewrite)
int Dir (const YCPPath &p, YCPList &out)
int Write (const YCPPath &p, const YCPValue &v, bool rewrite)
int Delete (const YCPPath &p)
IniIterator getContainerBegin ()
IniIterator getContainerEnd ()
IniSectiongetSection (const char *name)

Private Member Functions

void reindex ()
int getMyValue (const YCPPath &p, YCPValue &out, int what, int depth)
int getValue (const YCPPath &p, YCPValue &out, int what, int depth=0)
int getSectionProp (const YCPPath &p, YCPValue &out, int what, int depth=0)
int getAll (const YCPPath &p, YCPValue &out, int depth)
YCPMap getAllDoIt ()
int myDir (YCPList &l, IniType what)
int dirHelper (const YCPPath &p, YCPList &out, int sections, int depth=0)
int setMyValue (const YCPPath &p, const YCPValue &in, int what, int depth)
int setValue (const YCPPath &p, const YCPValue &in, int what, int depth=0)
int setSectionProp (const YCPPath &p, const YCPValue &in, int what, int depth)
int setAll (const YCPPath &p, const YCPValue &in, int depth)
int setAllDoIt (const YCPMap &in)
int delValue (const YCPPath &p, int depth)
int delSection (const YCPPath &p, int depth)
void delMyValue (const string &k)
void delValue1 (IniEntryIdxIterator exi)
void delSection1 (IniSectionIdxIterator sxi)
int getValueFlat (const YCPPath &p, YCPValue &out)
int setValueFlat (const YCPPath &p, const YCPValue &in)
int delValueFlat (const YCPPath &p)
int dirValueFlat (const YCPPath &p, YCPList &l)

Private Attributes

const IniParserip
string end_comment
int rewrite_by
IniContainer container
IniEntryIndex ivalues
IniSectionIndex isections

Detailed Description

Section definition.


Constructor & Destructor Documentation

IniSection::IniSection ( const char *  u  )  [inline]

explicit uninitialized constructor

IniSection::IniSection ( const IniParser p  )  [inline]
IniSection::IniSection ( const IniSection s  )  [inline]

Must define an own copy constructor so that the indices point to the copy, not the original

References reindex().

virtual IniSection::~IniSection (  )  [inline, virtual]
IniSection::IniSection ( const IniParser p,
string  n 
) [inline]

this is a constructor for newly added sections --> sets dirty

Parameters:
ip parser to take options from
n name of section

Member Function Documentation

void IniSection::clean (  )  [virtual]

set all subsection and values to clean

Reimplemented from IniBase.

References container, IniBase::dirty, and SECTION.

Referenced by IniParser::write(), IniAgent::Write(), and IniParser::write_helper().

int IniSection::Delete ( const YCPPath p  ) 

Generic delete for values, sections.

Parameters:
p path to delete
Returns:
0: success

References delSection(), delValue(), delValueFlat(), ip, IniParser::isFlat(), and y2error.

Referenced by IniAgent::Write().

void IniSection::delMyValue ( const string &  k  )  [private]

deletes all values of this name we own

Parameters:
k normalized key

References delValue1(), ivalues, and y2debug.

Referenced by delValue(), and delValueFlat().

int IniSection::delSection ( const YCPPath p,
int  depth 
) [private]

Delete section on path. Deletes also all its subsections.

Parameters:
p path to delete value at
depth see getSectionProp
Returns:
0 in case of success

References IniParser::changeCase(), delSection(), delSection1(), ip, isections, y2debug, and y2error.

Referenced by Delete(), and delSection().

void IniSection::delSection1 ( IniSectionIdxIterator  sxi  )  [private]

deletes a section we own

References container, IniBase::dirty, and isections.

Referenced by delSection(), and setSectionProp().

int IniSection::delValue ( const YCPPath p,
int  depth 
) [private]

Delete value on path

Parameters:
p path to delete value at
depth see getSectionProp
Returns:
0 in case of success

References IniParser::changeCase(), delMyValue(), delValue(), ip, isections, and y2error.

Referenced by Delete(), and delValue().

void IniSection::delValue1 ( IniEntryIdxIterator  exi  )  [private]

deletes a section we own

References container, IniBase::dirty, and ivalues.

Referenced by delMyValue(), and setMyValue().

int IniSection::delValueFlat ( const YCPPath p  )  [private]

Delete value in flat mode

References IniParser::changeCase(), delMyValue(), and ip.

Referenced by Delete().

int IniSection::Dir ( const YCPPath p,
YCPList out 
)

Generic interface to SCR::Dir

References YCPList::add(), dirHelper(), dirValueFlat(), ip, IniParser::isFlat(), and y2error.

Referenced by IniAgent::Dir().

int IniSection::dirHelper ( const YCPPath p,
YCPList out,
int  sections,
int  depth = 0 
) [private]

Recursive function to find the one section we want to dir and at last to do dir.

Parameters:
p path
out list of sections/keys
sections get sections (0) or values (!0)?
depth see getSectionProp
Returns:
0 in case of success

References IniParser::changeCase(), dirHelper(), ip, isections, myDir(), SECTION, VALUE, and y2debug.

Referenced by Dir(), and dirHelper().

int IniSection::dirValueFlat ( const YCPPath p,
YCPList l 
) [private]

Get list of values in flat mode.

References myDir(), and VALUE.

Referenced by Dir().

void IniSection::Dump (  ) 
int IniSection::findEndFromUp ( const vector< string > &  path,
int  wanted,
int  found = -1,
int  from = 0 
)

OBSOLETE, to be removed. If currently parsed end-section-tag hasn't matched currently processed section by name, we need to find the best possible match by type (read_by). Hence we look for a section on current path which can be closed by found end-section-tag. Note: this function can abort if the path passed in invalid.

Parameters:
path stack of the sections
wanted read-by we want to find
found let unset, last path index that matched
from let unset, current path index
Returns:
index to path

References IniParser::changeCase(), findEndFromUp(), ip, isections, IniBase::read_by, and y2error.

Referenced by findEndFromUp().

IniSection & IniSection::findSection ( const vector< string > &  path,
int  from = 0 
)

OBSOLETE, to be removed. Gets section on a path. Recursive. Attention! This function aborts when it doesn't find the section! Use with care! (Used only by IniParser::parse_helper)

Parameters:
path path to the section
from recursion depth
Returns:
Found ini section iterator

References IniParser::changeCase(), findSection(), ip, isections, and y2error.

Referenced by findSection().

int IniSection::getAll ( const YCPPath p,
YCPValue out,
int  depth 
) [private]

Get a complete subtree

Parameters:
p path : .all or .all.sec1.sec2
out output is placed here
depth Index of current path component. This function is recursive and depth marks the depth of recursion. We look for path[depth] in current "scope"
Returns:
0 in case of success

References IniParser::changeCase(), getAllDoIt(), ip, isections, and y2error.

Referenced by Read().

YCPMap IniSection::getAllDoIt (  )  [private, virtual]

Gets data for this section and all its values and subsections

Reimplemented from IniBase.

References YCPList::add(), YCPMap::add(), getContainerBegin(), getContainerEnd(), rewrite_by, and VALUE.

Referenced by getAll().

IniIterator IniSection::getContainerBegin (  ) 
IniIterator IniSection::getContainerEnd (  ) 
const char* IniSection::getEndComment (  )  const [inline]

References end_comment.

Referenced by IniParser::write_helper().

int IniSection::getMyValue ( const YCPPath p,
YCPValue out,
int  what,
int  depth 
) [private]

Get a value (or list of them if repeat_names) in this section It would be enough to pass only k instead of p and depth, but then the error messages would not know the whole path

Parameters:
p path
out output is placed here as YCPString or YCPInteger
what 0 - value, 1 - comment, other - read-by
depth path index
Returns:
0 in case of success

References YCPList::add(), IniParser::changeCase(), IniBase::getComment(), IniBase::getReadBy(), IniEntry::getValue(), ip, ivalues, IniParser::repeatNames(), and y2debug.

Referenced by getValue(), and getValueFlat().

int IniSection::getRewriteBy (  )  [inline]

References rewrite_by.

Referenced by IniParser::write().

IniSection & IniSection::getSection ( const char *  name  ) 

Aborts if entry doesn't exist!

Parameters:
name name of the entry to get
Returns:
entry Aborts if section doesn't exist! TODO gets any of multiple sections
Parameters:
name name of the section to get
Returns:
section

References isections, IniBase::name, and y2error.

int IniSection::getSectionProp ( const YCPPath p,
YCPValue out,
int  what,
int  depth = 0 
) [private]

Get section property -- comment or read-by

Parameters:
p path to value: .section_commment.sec1.sec2.sec3
out output is placed here as YCPString or YCPInteger
what 0 - comment, 1 - rewrite_by, other - read-by
depth Index of current path component. This function is recursive and depth marks the depth of recursion. We look for path[depth] in current "scope"
Returns:
0 in case of success

References YCPList::add(), IniParser::changeCase(), IniBase::comment, getSectionProp(), ip, isections, IniBase::read_by, IniParser::repeatNames(), rewrite_by, and y2debug.

Referenced by getSectionProp(), and Read().

int IniSection::getSubSectionRewriteBy ( const char *  name  ) 
Parameters:
name name of a section
Returns:
rewrite-by of section or -1 if the section wasn't found

References isections.

Referenced by IniAgent::Write().

int IniSection::getValue ( const YCPPath p,
YCPValue out,
int  what,
int  depth = 0 
) [private]

Get a value on a path

Parameters:
p path to value: .value.sec1.sec2.key
out output is placed here as YCPString or YCPInteger
what 0 - value, 1 - comment, other - read-by
depth Index of current path component. This function is recursive and depth marks the depth of recursion. We look for path[depth] in current "scope"
Returns:
0 in case of success

References IniParser::changeCase(), getMyValue(), ip, isections, and y2debug.

Referenced by Read().

int IniSection::getValueFlat ( const YCPPath p,
YCPValue out 
) [private]

Get value in flat mode.

Parameters:
p path to value
out output
Returns:
0 in case of success

References IniParser::changeCase(), getMyValue(), and ip.

Referenced by Read().

void IniSection::initReadBy (  )  [inline]

This function has very special purpose, it ensures that top-section delimiter is not written when saving multiple files.

References IniBase::read_by.

Referenced by IniParser::write().

IniSection & IniSection::initSection ( const string &  name,
const string &  comment,
int  rb,
int  wb = -2 
)

If section already exist, it is updated only in case, that it isn't dirty.

Parameters:
name section name
comment comment
rb read-by
wb rewrite-by. if -2 (default), it is not changed
Returns:
a reference to the section

References IniParser::changeCase(), IniBase::comment, container, IniBase::dirty, ip, isections, IniBase::name, IniBase::read_by, IniParser::repeatNames(), and rewrite_by.

Referenced by IniParser::parse_helper().

void IniSection::initValue ( const string &  key,
const string &  val,
const string &  comment,
int  rb 
)

If value doesn't exist, creates new, otherwise calls method init of the existing one.

Parameters:
key key
val value
comment comment
rb read-by

References IniParser::changeCase(), container, IniEntry::init(), ip, ivalues, and IniParser::repeatNames().

Referenced by IniParser::parse_helper().

bool IniSection::isDirty (  ) 

References IniBase::dirty, and isections.

Referenced by IniParser::write().

int IniSection::myDir ( YCPList l,
IniType  what 
) [private]

Get directory of this section

Parameters:
l result list
what VALUE or SECTION
Returns:
0 in case of success

References YCPList::add(), container, and SECTION.

Referenced by dirHelper(), and dirValueFlat().

void IniSection::operator= ( const IniSection s  )  [inline]
int IniSection::Read ( const YCPPath p,
YCPValue out,
bool  rewrite 
)

Generic interface to SCR::Read

Parameters:
rewrite a #19066 hack - if rewriting is active, .st accesses rewrite_by

References getAll(), getSectionProp(), getValue(), getValueFlat(), ip, IniParser::isFlat(), and y2error.

Referenced by IniAgent::Read().

void IniSection::reindex (  )  [private]

build ivalues and isections

References IniParser::changeCase(), getContainerBegin(), getContainerEnd(), ip, isections, ivalues, and VALUE.

Referenced by IniSection(), operator=(), and setAllDoIt().

int IniSection::setAll ( const YCPPath p,
const YCPValue in,
int  depth 
) [private]

Set all properties and values for a section. No recursive creation of the specified path.

Parameters:
p path where to start
in value to set
depth see getSectionProp
Returns:
0 in case of success

References IniParser::changeCase(), ip, isections, setAllDoIt(), and y2debug.

Referenced by Write().

int IniSection::setAllDoIt ( const YCPMap in  )  [private, virtual]

Set all properties and values for a section.

Parameters:
in value to set
Returns:
0 in case of success

Reimplemented from IniBase.

References container, IniParser::getFileName(), IniBase::getMapInteger(), IniBase::getMapString(), ip, YCPElement::isNull(), reindex(), rewrite_by, IniEntry::setAllDoIt(), setAllDoIt(), YCPList::size(), YCPList::value(), YCPMap::value(), and y2error.

Referenced by setAll(), and setAllDoIt().

void IniSection::setEndComment ( const char *  c  ) 

If there is no comment at the beginning and no values and no sections, it is better to set is as comment at the beginning. Sets also dirty flag.

Parameters:
c comment

References IniBase::comment, container, and end_comment.

Referenced by IniParser::parse_helper().

int IniSection::setMyValue ( const YCPPath p,
const YCPValue in,
int  what,
int  depth 
) [private]

Set a value (or list of them if repeat_names) in this section It would be enough to pass only k instead of p and depth, but then the error messages would not know the whole path

Parameters:
p path
in value to set (YCPString or YCPInteger) (or YCPList)
what 0 -- value, 1 -- comment, other -- read-by.
depth path index
Returns:
0 on success

need to add a value ...

References YCPList::add(), as_integer(), as_list(), as_string(), IniParser::changeCase(), container, delValue1(), IniBase::dirty, ip, YCPElement::isNull(), ivalues, IniParser::repeatNames(), IniBase::setComment(), IniBase::setName(), IniBase::setReadBy(), IniEntry::setValue(), YCPList::size(), to_string(), YCPList::value(), y2debug, and y2error.

Referenced by setValue(), and setValueFlat().

void IniSection::setRewriteBy ( int  c  )  [inline]

sets dirty flag also

References IniBase::dirty, and rewrite_by.

Referenced by setSectionProp().

int IniSection::setSectionProp ( const YCPPath p,
const YCPValue in,
int  what,
int  depth 
) [private]

Set section comment or read-by. Creates recursively all non-existing subsections.

Parameters:
p path to set value on
in value to set (YCPString or YCPInteger)
what 0 -- comment, 1 - rewrite_by, other -- read-by.
depth see getSectionProp
Returns:
0

need to add a section ...

References YCPList::add(), as_integer(), as_list(), as_string(), IniParser::changeCase(), container, delSection1(), ip, isections, YCPElement::isNull(), IniParser::repeatNames(), IniBase::setComment(), IniBase::setReadBy(), setRewriteBy(), YCPList::size(), str, YCPList::value(), and y2debug.

Referenced by Write().

int IniSection::setValue ( const YCPPath p,
const YCPValue in,
int  what,
int  depth = 0 
) [private]

Set value on path. Creates recursively all non-existing subsections.

Parameters:
p path to set value on
in value to set (YCPString or YCPInteger)
what 0 -- value, 1 -- comment, other -- read-by.
depth see getSectionProp
Returns:
0

References IniParser::changeCase(), container, ip, isections, setMyValue(), and y2debug.

Referenced by Write().

int IniSection::setValueFlat ( const YCPPath p,
const YCPValue in 
) [private]

Set value in flat mode.

Parameters:
p path to value
out input
Returns:
0 in case of success

References IniParser::changeCase(), ip, and setMyValue().

Referenced by Write().

int IniSection::Write ( const YCPPath p,
const YCPValue v,
bool  rewrite 
)

Generic interface to SCR::Write

Parameters:
rewrite a #19066 hack - if rewriting is active, .st accesses rewrite_by

References ip, IniParser::isFlat(), setAll(), setSectionProp(), setValue(), setValueFlat(), and y2error.

Referenced by IniAgent::Write().


Member Data Documentation

What entries of cvalues and csections are valid Values contained by this section Sections contained by this section

Referenced by clean(), delSection1(), delValue1(), getContainerBegin(), getContainerEnd(), initSection(), initValue(), myDir(), operator=(), setAllDoIt(), setEndComment(), setMyValue(), setSectionProp(), and setValue().

string IniSection::end_comment [private]

if this is global section, there may be comment at the end this is quite special case, it is impossible to change it

Referenced by getEndComment(), operator=(), and setEndComment().

const IniParser* IniSection::ip [private]

Index of values

Referenced by delMyValue(), delValue1(), Dump(), getMyValue(), initValue(), reindex(), and setMyValue().

int IniSection::rewrite_by [private]

index to IniParser::rewrites for filename - section name mapping It appears that read_by was used for both purposes, causing bug (#19066).

Referenced by getAllDoIt(), getRewriteBy(), getSectionProp(), initSection(), operator=(), setAllDoIt(), and setRewriteBy().


The documentation for this class was generated from the following files:

Generated on a sunny day for yast2-core by doxygen 1.6.3