LCOV - code coverage report
Current view: directory - ogr/ogrsf_frmts/ili/iom - iom_basket.cpp (source / functions) Found Hit Coverage
Test: gdal_filtered.info Lines: 163 65 39.9 %
Date: 2012-12-26 Functions: 52 18 34.6 %

       1                 : /**********************************************************************
       2                 :  * $Id: iom_basket.cpp 12582 2007-10-29 09:38:21Z pka $
       3                 :  *
       4                 :  * Project:  iom - The INTERLIS Object Model
       5                 :  * Purpose:  For more information, please see <http://iom.sourceforge.net>
       6                 :  * Author:   Claude Eisenhut
       7                 :  *
       8                 :  **********************************************************************
       9                 :  * Copyright (c) 2007, Claude Eisenhut
      10                 :  *
      11                 :  * Permission is hereby granted, free of charge, to any person obtaining a
      12                 :  * copy of this software and associated documentation files (the "Software"),
      13                 :  * to deal in the Software without restriction, including without limitation
      14                 :  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
      15                 :  * and/or sell copies of the Software, and to permit persons to whom the
      16                 :  * Software is furnished to do so, subject to the following conditions:
      17                 :  * 
      18                 :  * The above copyright notice and this permission notice shall be included
      19                 :  * in all copies or substantial portions of the Software.
      20                 :  * 
      21                 :  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
      22                 :  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
      23                 :  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
      24                 :  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
      25                 :  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
      26                 :  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
      27                 :  * DEALINGS IN THE SOFTWARE.
      28                 :  ****************************************************************************/
      29                 : 
      30                 : 
      31                 : /** @file
      32                 :  * implementation of object basket
      33                 :  * @defgroup basket basket functions
      34                 :  * @{
      35                 :  */
      36                 : 
      37                 : #include <iom/iom_p.h>
      38                 : 
      39                 : /** gets an iterator to walk threw all objects of a basket.
      40                 :  * The list includes embedded link(-objects), but no structures.
      41                 :  */
      42              51 : extern "C" IOM_ITERATOR iom_iteratorobject(IOM_BASKET basket)
      43                 : {
      44              51 :   return (dbgnew iom_iterator(basket))->getRef();
      45                 : }
      46                 : 
      47                 : /** gets the next object.
      48                 :  * Returns 0 if no more objects.
      49                 :  */
      50           13710 : extern "C" IOM_OBJECT iom_nextobject(IOM_ITERATOR iterator)
      51                 : {
      52           13710 :   IomObject ret=iterator->next_object();
      53           13710 :   return ret.isNull() ? 0 : ret->getRef();
      54                 : }
      55                 : 
      56                 : /** create a new object.
      57                 :  */
      58               0 : extern "C" IOM_OBJECT iom_newobject(IOM_BASKET basket,IOM_TAG type,IOM_OID oid)
      59                 : {
      60               0 :   IomObject ret=new iom_object();
      61               0 :   ret->setOid(X(oid));
      62               0 :   ret->setTag(ParserHandler::getTagId(type));
      63               0 :   basket->addObject(ret);
      64               0 :   return ret->getRef();
      65                 : }
      66                 : 
      67                 : 
      68                 : /**
      69                 :  * release handle
      70                 :  */
      71              11 : extern "C" int iom_releasebasket(IOM_BASKET basket)
      72                 : {
      73              11 :   if(!basket->freeRef()){
      74              11 :     delete basket;
      75                 :   }
      76              11 :   return 0;
      77                 : }
      78                 : 
      79                 : // Basket löschen (Basket aus Datei entfernen)
      80                 : extern "C" int iom_deletebasket(IOM_BASKET basket);
      81                 : 
      82                 : 
      83                 : /** gets OID of a basket.
      84                 :  *  return value is valid until iom_setbasketoid() or iom_close()
      85                 :  */
      86               0 : extern "C" IOM_OID iom_getbasketoid(IOM_BASKET basket)
      87                 : {
      88               0 :   return basket->getOid_c();
      89                 : }
      90                 : 
      91                 : /** sets OID of a basket.
      92                 :  */
      93               0 : extern "C" void iom_setbasketoid(IOM_BASKET basket,IOM_OID oid){
      94               0 :   basket->setOid(X(oid));
      95               0 : }
      96                 : 
      97                 : 
      98                 : /** gets the consistency of a basket.
      99                 :  */
     100               0 : extern "C" int iom_getbasketconsistency(IOM_BASKET basket)
     101                 : {
     102               0 :   return basket->getConsistency();
     103                 : }
     104                 : 
     105                 : /** sets the consistency of a basket.
     106                 :  */
     107               0 : extern "C" void iom_setbasketconsistency(IOM_BASKET basket,int consistency)
     108                 : {
     109               0 :   basket->setConsistency(consistency);
     110               0 : }
     111                 : 
     112                 : /** gets xml element name of a basket.
     113                 :  *  return value is valid until iom_close() or iom_setbaskettag().
     114                 :  */
     115               0 : extern "C" IOM_TAG iom_getbaskettag(IOM_BASKET basket)
     116                 : {
     117               0 :   return basket->getTag_c();
     118                 : }
     119                 : 
     120                 : /** sets xml element name of a basket.
     121                 :  */
     122               0 : extern "C" void iom_setbaskettag(IOM_BASKET basket,IOM_TAG topic)
     123                 : {
     124               0 :   basket->setTag(ParserHandler::getTagId(topic));
     125               0 : }
     126                 : 
     127                 : /** get xmlfile line number of a basket.
     128                 :  */
     129               0 : extern "C" int iom_getbasketline(IOM_BASKET basket)
     130                 : {
     131               0 :   return basket->getXMLLineNumber();
     132                 : }
     133                 : 
     134                 : /** get xmlfile column number of a basket.
     135                 :  */
     136               0 : extern "C" int iom_getbasketcol(IOM_BASKET basket)
     137                 : {
     138               0 :   return basket->getXMLColumnNumber();
     139                 : }
     140                 : 
     141                 : /** gets object with a given OID or 0.
     142                 :  */
     143            1779 : extern "C" IOM_OBJECT iom_getobject(IOM_BASKET basket,IOM_OID oid)
     144                 : {
     145            1779 :   IomObject ret=basket->getObject(X(oid));
     146            1779 :   return ret.isNull() ? 0 : ret->getRef();
     147                 : }
     148                 : 
     149                 : // Objekt in einen anderen Basket verschieben
     150                 : extern "C" int iom_relocateobject(IOM_BASKET basket,IOM_OBJECT object);
     151                 : 
     152                 : 
     153                 : // seit dem letzten Lesen/Schreiben geänderte Objekte
     154                 : extern "C" IOM_ITERATOR iom_iteratorchgobject(IOM_BASKET basket);
     155                 : extern "C" IOM_OBJECT iom_nextchgobject(IOM_ITERATOR iterator); 
     156                 : 
     157                 : // seit dem letzten Lesen/Schreiben gelöschte Objekte
     158                 : extern "C" IOM_ITERATOR iom_iteratordelobject(IOM_BASKET basket);
     159                 : extern "C" IOM_OBJECT iom_nextdelobject(IOM_ITERATOR iterator);
     160                 : 
     161                 : 
     162                 : /** @}
     163                 :  */
     164                 : 
     165              12 : iom_basket::iom_basket() :
     166                 :   file()
     167                 :   ,tag(0)
     168                 :   ,tag_c(0)
     169                 :   ,xmlLine(0)
     170                 :   ,xmlCol(0)
     171                 :   ,consistency(IOM_COMPLETE)
     172                 :   ,kind(IOM_FULL)
     173                 :   ,oid_w(0)
     174                 :   ,oid_c(0)
     175                 :   ,startstate_w(0)
     176                 :   ,startstate_c(0)
     177                 :   ,endstate_w(0)
     178                 :   ,endstate_c(0)
     179                 :   ,topics_w(0)
     180                 :   ,topics_c(0)
     181              12 :   ,useCount(0)
     182                 : {
     183              12 : }
     184                 : 
     185              11 : iom_basket::~iom_basket()
     186                 : {
     187              11 :   if(tag_c)XMLString::release(&tag_c);
     188              11 :   if(oid_c)XMLString::release(&oid_c);
     189              11 :   if(oid_w)XMLString::release(&oid_w);
     190              11 :   if(startstate_c)XMLString::release(&startstate_c);
     191              11 :   if(startstate_w)XMLString::release(&startstate_w);
     192              11 :   if(endstate_c)XMLString::release(&endstate_c);
     193              11 :   if(endstate_w)XMLString::release(&endstate_w);
     194              11 :   if(topics_c)XMLString::release(&topics_c);
     195              11 :   if(topics_w)XMLString::release(&topics_w);
     196              11 : }
     197                 : 
     198              12 : void iom_basket::setTag(int tag1)
     199                 : {
     200              12 :   if(tag_c)tag_c=0;
     201              12 :   tag=tag1;
     202              12 : }
     203               0 : int iom_basket::getTag()
     204                 : {
     205               0 :   return tag;
     206                 : }
     207               0 : const char *iom_basket::getTag_c()
     208                 : {
     209               0 :   if(!tag){
     210               0 :     return 0;
     211                 :   }
     212               0 :   if(!tag_c){
     213               0 :     const XMLCh *const tag_w=ParserHandler::getTagName(tag);
     214               0 :     tag_c=XMLString::transcode(tag_w);
     215                 :   }
     216               0 :   return tag_c;
     217                 : }
     218                 : 
     219              12 : void iom_basket::setXMLLineNumber(int line)
     220                 : {
     221              12 :   xmlLine=line;
     222              12 : }
     223               0 : int iom_basket::getXMLLineNumber()
     224                 : {
     225               0 :   return xmlLine;
     226                 : }
     227                 : 
     228              12 : void iom_basket::setXMLColumnNumber(int col)
     229                 : {
     230              12 :   xmlCol=col;
     231              12 : }
     232                 : 
     233               0 : int iom_basket::getXMLColumnNumber()
     234                 : {
     235               0 :   return xmlCol;
     236                 : }
     237                 : 
     238               0 : void iom_basket::setConsistency(int cons)
     239                 : {
     240               0 :   consistency=cons;
     241               0 : }
     242                 : 
     243               0 : int iom_basket::getConsistency()
     244                 : {
     245               0 :   return consistency;
     246                 : }
     247                 : 
     248               0 : void iom_basket::setKind(int kind1)
     249                 : {
     250               0 :   kind=kind1;
     251               0 : }
     252                 : 
     253               0 : int iom_basket::getKind()
     254                 : {
     255               0 :   return kind;
     256                 : }
     257                 : 
     258              12 : void iom_basket::setOid(const XMLCh *oid)
     259                 : {
     260              12 :   if(oid_c)XMLString::release(&oid_c);
     261              12 :   if(oid_w)XMLString::release(&oid_w);
     262              12 :   oid_w=XMLString::replicate(oid);
     263              12 : }
     264               0 : const XMLCh *iom_basket::getOid()
     265                 : {
     266               0 :   return oid_w;
     267                 : }
     268               0 : const char *iom_basket::getOid_c()
     269                 : {
     270               0 :   if(!oid_w){
     271               0 :     return 0;
     272                 :   }
     273               0 :   if(!oid_c){
     274               0 :     oid_c=XMLString::transcode(oid_w);
     275                 :   }
     276               0 :   return oid_c;
     277                 : }
     278                 : 
     279               0 : void iom_basket::setStartState(const XMLCh *startstate)
     280                 : {
     281               0 :   if(startstate_c)XMLString::release(&startstate_c);
     282               0 :   if(startstate_w)XMLString::release(&startstate_w);
     283               0 :   startstate_w=XMLString::replicate(startstate);
     284               0 : }
     285               0 : const XMLCh *iom_basket::getStartState()
     286                 : {
     287               0 :   return startstate_w;
     288                 : }
     289               0 : const char *iom_basket::getStartState_c()
     290                 : {
     291               0 :   if(!startstate_w){
     292               0 :     return 0;
     293                 :   }
     294               0 :   if(!startstate_c){
     295               0 :     startstate_c=XMLString::transcode(startstate_w);
     296                 :   }
     297               0 :   return startstate_c;
     298                 : }
     299                 : 
     300                 : 
     301               0 : void iom_basket::setEndState(const XMLCh *endstate)
     302                 : {
     303               0 :   if(endstate_c)XMLString::release(&endstate_c);
     304               0 :   if(endstate_w)XMLString::release(&endstate_w);
     305               0 :   endstate_w=XMLString::replicate(endstate);
     306               0 : }
     307               0 : const XMLCh *iom_basket::getEndState()
     308                 : {
     309               0 :   return endstate_w;
     310                 : }
     311               0 : const char *iom_basket::getEndState_c()
     312                 : {
     313               0 :   if(!endstate_w){
     314               0 :     return 0;
     315                 :   }
     316               0 :   if(!endstate_c){
     317               0 :     endstate_c=XMLString::transcode(endstate_w);
     318                 :   }
     319               0 :   return endstate_c;
     320                 : }
     321                 : 
     322                 : 
     323               0 : void iom_basket::setTopics(const XMLCh *topics)
     324                 : {
     325               0 :   if(topics_c)XMLString::release(&topics_c);
     326               0 :   if(topics_w)XMLString::release(&topics_w);
     327               0 :   topics_w=XMLString::replicate(topics);
     328               0 : }
     329               0 : const XMLCh *iom_basket::getTopics()
     330                 : {
     331               0 :   return topics_w;
     332                 : }
     333               0 : const char *iom_basket::getTopics_c()
     334                 : {
     335               0 :   if(!topics_w){
     336               0 :     return 0;
     337                 :   }
     338               0 :   if(!topics_c){
     339               0 :     topics_c=XMLString::transcode(topics_w);
     340                 :   }
     341               0 :   return topics_c;
     342                 : }
     343                 : 
     344                 : 
     345            3167 : void iom_basket::addObject(IomObject object)
     346                 : {
     347            3167 :   objectv.push_back(object);
     348            3167 :   object->setBasket(this);
     349            3167 : }
     350                 : 
     351            1779 : IomObject iom_basket::getObject(const XMLCh *oid)
     352                 : {
     353            1779 :   std::vector<IomObject>::iterator it;
     354            1779 :   for(it=objectv.begin();it!=objectv.end();it++){
     355          158788 :     IomObject obj=*it;
     356          158788 :     if(!XMLString::compareString(oid,obj->getOid())){
     357            1779 :       return obj;
     358                 :     }
     359                 :   }
     360               0 :   return IomObject();
     361                 : }
     362                 : 
     363                 : 
     364            3254 : IomBasket::IomBasket(struct iom_basket *pointee1) 
     365            3254 : : pointee(pointee1 ? pointee1->getRef() : 0){
     366            3254 : }
     367              87 : IomBasket::IomBasket(const IomBasket& src) 
     368              87 : : pointee(src.pointee ? src.pointee->getRef() : 0){
     369              87 : }
     370              24 : IomBasket& IomBasket::operator=(const IomBasket& src){
     371              24 :   if(this!=&src){
     372              24 :     if(pointee && !pointee->freeRef()){
     373               0 :       delete pointee;
     374                 :     }
     375              24 :     pointee=src.pointee ? src.pointee->getRef() :0;
     376                 :   }
     377              24 :   return *this;
     378                 : }
     379            4078 : IomBasket::~IomBasket(){
     380            4078 :   if(pointee && !pointee->freeRef()){
     381               0 :     delete pointee;
     382                 :   }
     383            6217 : }

Generated by: LCOV version 1.7