1/*-
2 * See the file LICENSE for redistribution information.
3 *
4 * Copyright (c) 2009 Oracle.  All rights reserved.
5 *
6 */
7using System;
8using System.Collections.Generic;
9using System.Text;
10using BerkeleyDB.Internal;
11
12namespace BerkeleyDB {
13    /// <summary>
14    /// A class for traversing the records of a <see cref="HashDatabase"/>
15    /// </summary>
16    public class HashCursor : Cursor {
17        internal HashCursor(DBC dbc, uint pagesize)
18            : base(dbc, DatabaseType.HASH, pagesize) { }
19        internal HashCursor(DBC dbc, uint pagesize, CachePriority p)
20            : base(dbc, DatabaseType.HASH, pagesize, p) { }
21
22        /// <summary>
23        /// Create a new cursor that uses the same transaction and locker ID as
24        /// the original cursor.
25        /// </summary>
26        /// <remarks>
27        /// This is useful when an application is using locking and requires two
28        /// or more cursors in the same thread of control.
29        /// </remarks>
30        /// <param name="keepPosition">
31        /// If true, the newly created cursor is initialized to refer to the
32        /// same position in the database as the original cursor (if any) and
33        /// hold the same locks (if any). If false, or the original cursor does
34        /// not hold a database position and locks, the created cursor is
35        /// uninitialized and will behave like a cursor newly created by
36        /// <see cref="HashDatabase.Cursor"/>.</param>
37        /// <returns>A newly created cursor</returns>
38        public new HashCursor Duplicate(bool keepPosition) {
39            return new HashCursor(
40                dbc.dup(keepPosition ? DbConstants.DB_POSITION : 0), pgsz);
41        }
42        /// <summary>
43        /// Insert the data element as a duplicate element of the key to which
44        /// the cursor refers.
45        /// </summary>
46        /// <param name="data">The data element to insert</param>
47        /// <param name="loc">
48        /// Specify whether to insert the data item immediately before or
49        /// immediately after the cursor's current position.
50        /// </param>
51        public new void Insert(DatabaseEntry data, InsertLocation loc) {
52            base.Insert(data, loc);
53        }
54        /// <summary>
55        /// Insert the specified key/data pair into the database, unless a
56        /// key/data pair comparing equally to it already exists in the
57        /// database.
58        /// </summary>
59        /// <param name="pair">The key/data pair to be inserted</param>
60        /// <exception cref="KeyExistException">
61        /// Thrown if a matching key/data pair already exists in the database.
62        /// </exception>
63        public new void AddUnique(
64            KeyValuePair<DatabaseEntry, DatabaseEntry> pair) {
65            base.AddUnique(pair);
66        }
67        /// <summary>
68        /// Insert the specified key/data pair into the database.
69        /// </summary>
70        /// <param name="pair">The key/data pair to be inserted</param>
71        /// <param name="loc">
72        /// If the key already exists in the database and no duplicate sort
73        /// function has been specified, specify whether the inserted data item
74        /// is added as the first or the last of the data items for that key.
75        /// </param>
76        public new void Add(KeyValuePair<DatabaseEntry, DatabaseEntry> pair,
77            InsertLocation loc) {
78            base.Add(pair, loc);
79        }
80    }
81}