Symbian3/PDK/Source/GUID-33241691-7362-5FA1-A3B0-C3FA550E5E09.dita
author Dominic Pinkman <dominic.pinkman@nokia.com>
Fri, 16 Jul 2010 17:23:46 +0100
changeset 12 80ef3a206772
parent 9 59758314f811
child 14 578be2adaf3e
permissions -rw-r--r--
Week 28 contribution of PDK documentation content. See release notes for details. Fixes bugs Bug 1897, Bug 344, Bug 2681, Bug 463, Bug 1522.

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies) All rights reserved. -->
<!-- This component and the accompanying materials are made available under the terms of the License 
"Eclipse Public License v1.0" which accompanies this distribution, 
and is available at the URL "http://www.eclipse.org/legal/epl-v10.html". -->
<!-- Initial Contributors:
    Nokia Corporation - initial contribution.
Contributors: 
-->
<!DOCTYPE concept
  PUBLIC "-//OASIS//DTD DITA Concept//EN" "concept.dtd">
<concept id="GUID-33241691-7362-5FA1-A3B0-C3FA550E5E09" xml:lang="en"><title>Store
Overview</title><shortdesc>Provides structured data storage, using networks of streams. </shortdesc><prolog><metadata><keywords/></metadata></prolog><conbody>
<section id="GUID-D38A0EFA-4D87-406B-AD87-CF79E61F2A08"><title>Purpose</title> <p>It
is often necessary to persist a data structure such as an object by writing
it to memory as a sequence of bytes called a stream. A complex object is persisted
as multiple streams collectively known as a store. The Store component provides
access to stores in Symbian platform. </p> </section>
<section id="GUID-6E2C9766-E106-4A63-81CC-453B64C51DCC"><title>Required background</title> <p>The
Store component requires no specific background apart from C++ and Symbian
platform. </p> </section>
<section id="GUID-597F91DD-2AA3-443C-BC98-C1E8A74BF505"><title>Key concepts
and terms</title> <p>The API has the following key concepts. </p> <dl>
<dlentry>
<dt>stream store</dt>
<dd><p>a store consisting of streams, implemented by <xref href="GUID-30726D8E-E18D-3A3A-8EFB-CCA4F04C984D.dita"><apiname>CStreamStore</apiname></xref>  </p> </dd>
</dlentry>
<dlentry>
<dt>persistent store</dt>
<dd><p>a store which persists beyond the lifetime of the application which
creates it, implemented by <xref href="GUID-21637329-EC49-39AD-8986-A22289D8CFE8.dita"><apiname>CPersistentStore</apiname></xref>  </p> </dd>
</dlentry>
<dlentry>
<dt>embedded store</dt>
<dd><p>a store which can itself be stored as a stream in another store, implemented
by <xref href="GUID-F2EC3A9D-5F4B-3C98-98DC-44394C54B6DE.dita"><apiname>CEmbeddedStore</apiname></xref>  </p> </dd>
</dlentry>
<dlentry>
<dt>memory store</dt>
<dd><p>a store which resides in memory and exists only for the life of the
store object, implemented by <xref href="GUID-5EC5199D-50F2-3BFA-BA45-4C5C017281DD.dita"><apiname>CBufStore</apiname></xref>  </p> </dd>
</dlentry>
<dlentry>
<dt>dictionary store base and streams</dt>
<dd><p>a sequence of streams accessed by a UID, implemented by <xref href="GUID-9899DA2C-DB1B-3D67-8719-B7E13658B4D7.dita"><apiname>CDictionaryStore</apiname></xref>  </p> </dd>
</dlentry>
</dl> </section>
<section id="GUID-8B3C967B-ED78-4756-8162-80EB1261433C"><title>Architecture</title> <p>A
stream is a representation of a data structure (such as an object) as a sequence
of bytes. Structures as complex as most applications require multiple streams
to store their state. This is termed a store. Stream types that work with
stores are provided by the <xref href="GUID-66ACFC54-5671-5B72-9DBC-A76F7A112D63.dita">Store
Streams</xref> API. </p> <p>The Stores API defines both base classes that
define store abstractions without specifying the storage medium, and some
concrete store types. </p> <p>The abstract classes are used as the base classes
of separate APIs which use particular storage media. In particular the <xref href="GUID-21CF1D5F-44C5-5407-B3C9-8BC103C97079.dita">File Stores</xref> API defines
further concrete stores which use file storage. Its base class, <xref href="GUID-9CBA8AB1-5BFC-3719-82AF-22A9BD93C306.dita"><apiname>CFileStore</apiname></xref> extends <xref href="GUID-21637329-EC49-39AD-8986-A22289D8CFE8.dita"><apiname>CPersistentStore</apiname></xref> and
has its own subclasses such as <xref href="GUID-8B713854-7858-3E02-8A1C-B3E6C1C9EA85.dita"><apiname>CDirectFileStore</apiname></xref>. Concrete
store types do not have to provide all the stream manipulation functionality
defined by the base class interfaces: for example, direct file stores do not
support individual deletion of streams within a store. </p> <p>Dictionary
stores are accessed by a UID whereas stream stores are accessed by a stream
ID. Persistent stores persist beyond the lifetime of the application that
created them: they have a root stream from which the other streams in the
store can be found. Embedded stores can be stored as streams in other stores:
once written they cannot be modified. </p> <p>Stores are integrated with the
application architecture as defined in the Uikon Core API. That expects file-based
and embedded applications to handle their data storage through stores. </p> <p>Stores
are also the basis of the relational database provided by <xref href="GUID-13C95985-D16F-5A9E-A7F8-CAB637C4C6ED.dita">DBMS</xref>. </p> <fig id="GUID-39DD7576-D335-5CD2-92A6-E0B81EF2160A">
<title>Store inheritance diagram</title>
<image href="GUID-09A58B23-68EA-58D7-BBC9-E7F4C4BF55D7_d0e630065_href.png" placement="inline"/>
</fig> </section>
<section id="GUID-CBBE7C0F-6999-4FCE-9793-C71B61130C75"><title>APIs</title> <table id="GUID-6D27BADC-7CA7-5E39-8308-29CAA1858CAB">
<tgroup cols="2"><colspec colname="col0"/><colspec colname="col1"/>
<thead>
<row>
<entry>API</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry><p> <xref href="GUID-30726D8E-E18D-3A3A-8EFB-CCA4F04C984D.dita"><apiname>CStreamStore</apiname></xref>  </p> </entry>
<entry><p>Provides the core abstract framework for stores allowing streams
to be created and manipulated </p> </entry>
</row>
<row>
<entry><p> <xref href="GUID-21637329-EC49-39AD-8986-A22289D8CFE8.dita"><apiname>CPersistentStore</apiname></xref>  </p> </entry>
<entry><p>Persistent store abstract base class </p> </entry>
</row>
<row>
<entry><p> <xref href="GUID-F2EC3A9D-5F4B-3C98-98DC-44394C54B6DE.dita"><apiname>CEmbeddedStore</apiname></xref>  </p> </entry>
<entry><p>Encapsulates an embedded store </p> </entry>
</row>
<row>
<entry><p> <xref href="GUID-5EC5199D-50F2-3BFA-BA45-4C5C017281DD.dita"><apiname>CBufStore</apiname></xref>  </p> </entry>
<entry><p>In-memory non-persistent store </p> </entry>
</row>
<row>
<entry><p> <xref href="GUID-9899DA2C-DB1B-3D67-8719-B7E13658B4D7.dita"><apiname>CDictionaryStore</apiname></xref>  </p> </entry>
<entry><p>Dictionary store interface </p> </entry>
</row>
<row>
<entry><p> <xref href="GUID-4FA6EE6C-5B4E-39E0-B888-ABDE19985976.dita"><apiname>RStoreReadStream</apiname></xref>  </p> </entry>
<entry><p>Supports the opening and manipulation of an existing stream in a
store </p> </entry>
</row>
<row>
<entry><p> <xref href="GUID-346D4908-15C7-3F15-945F-D561E774022D.dita"><apiname>RStoreWriteStream</apiname></xref>  </p> </entry>
<entry><p>Supports the writing of a stream to a store </p> </entry>
</row>
<row>
<entry><p> <xref href="GUID-418E7956-BE91-39A2-A26D-F1CA88B458AA.dita"><apiname>RFileBuf</apiname></xref>  </p> </entry>
<entry><p>A stream buffer hosted by a file </p> </entry>
</row>
</tbody>
</tgroup>
</table> </section>
<section id="GUID-4B0C731E-F9CB-4406-8DD4-C8C325B08257"><title>Typical uses</title> <p>A
typical use of stores is to write files to memory without using the file server.
This is a good thing to do when an application uses embedded documents. </p> </section>
</conbody><related-links>
<link href="GUID-F4875493-6501-56FC-90E5-5EEAA89A72C3.dita"><linktext>Persistent
Storage Overview</linktext></link>
<link href="GUID-21CF1D5F-44C5-5407-B3C9-8BC103C97079.dita"><linktext>File Stores
Overview</linktext></link>
<link href="GUID-66ACFC54-5671-5B72-9DBC-A76F7A112D63.dita"><linktext>Store Streams
                Overview</linktext></link>
<link href="GUID-744ACF2C-963B-5E2F-A6B3-220AB899FD23.dita"><linktext>Streaming
Overview</linktext></link>
</related-links></concept>