<?xml version="1.0"?>
<page id="bson_context_t"
      type="guide"
      style="class"
      xmlns="http://projectmallard.org/1.0/"
      xmlns:api="http://projectmallard.org/experimental/api/"
      xmlns:ui="http://projectmallard.org/experimental/ui/">

  <info>
    <link type="guide" xref="index#api-reference" />
  </info>

  <title>bson_context_t</title>
  <subtitle>BSON OID Generation Context</subtitle>

  <section id="description">
    <title>Synopsis</title>
    <synopsis><code mime="text/x-csrc"><![CDATA[#include <bson.h>

typedef enum
{
   BSON_CONTEXT_NONE               = 0,
   BSON_CONTEXT_THREAD_SAFE        = (1 << 0),
   BSON_CONTEXT_DISABLE_HOST_CACHE = (1 << 1),
   BSON_CONTEXT_DISABLE_PID_CACHE  = (1 << 2),
#if defined(__linux__)
   BSON_CONTEXT_USE_TASK_ID        = (1 << 3),
#endif
} bson_context_flags_t;

typedef struct _bson_context_t bson_context_t;

bson_context_t *bson_context_get_default (void) BSON_GNUC_CONST;
bson_context_t *bson_context_new         (bson_context_flags_t  flags);
void            bson_context_destroy     (bson_context_t       *context);]]></code></synopsis>
  </section>

  <section id="description">
    <title>Description</title>
    <p>The <code xref="bson_context_t">bson_context_t</code> structure is context for generation of BSON Object IDs. This context allows for specialized overriding of how ObjectIDs are generated based on the applications requirements. For example, disabling of PID caching can be configured if the application cannot detect when a call to <code>fork()</code> has occurred.</p>.
  </section>

  <links type="topic" groups="function" style="2column">
    <title>Functions</title>
  </links>

  <section id="examples">
    <title>Example</title>
    <listing>
      <title></title>
      <synopsis><code mime="text/x-csrc"><![CDATA[#include <bson.h>

int main (int argc, char *argv[])
{
   bson_context_t *ctx = NULL;
   bson_oid_t oid;

   /* use default context, via bson_context_get_default() */
   bson_oid_init (&oid, NULL);

   /* specify a local context for additional control */
   ctx = bson_context_new (BSON_CONTEXT_DISABLE_PID_CACHE | BSON_CONTEXT_THREAD_SAFE);
   bson_oid_init (&oid, ctx);

   bson_context_destroy (ctx);

   return 0;
}]]></code></synopsis>
    </listing>
  </section>
</page>
