---
name: "TM::Synchronizable"
section: "3pm"
platform: "linux"
package: "libtm-perl"
version: "1.56-7"
release: "Debian 8 (Jessie)"
platforms: ["linux"]
url: "https://new.carta.tech/TM::Synchronizable"
---

# TM::Synchronizable(3pm)

Topic Maps, trait for synchronizable resources

## NAME

TM::Synchronizable - Topic Maps, trait for synchronizable resources

## SYNOPSIS

```
   # you write an input/output driver
   # see for example TM::Synchronizable::MLDBM
   package My::WhatEver;
     # provides source_in and/or source_out methods
     sub source_in  { .... }
     sub source_out { .... }
     1;
   # you construct your map class
   package MySyncableMap;
     use TM;
     use base qw(TM);
     use Class::Trait qw(TM::ResourceAble TM::Synchronizable My::WhatEver);

     1;
   # you then use that
   my $tm = MySyncableMap (url => 'file:/where/ever');
   $tm->sync_in;
   # work with the map, etc...
   $tm->sync_out;
```

## DESCRIPTION

This trait implements the abstract synchronization between in-memory topic maps and the resources which are attached to them, i.e. files, web pages, etc. whatever can be addressed via a URI. Consequently, this trait inherits from TM::ResourceAble, although Class::Trait does not do this for you (sadly).

The trait provides the methods `"sync_in"` and `"sync_out"` to implement the synchronization. In this process it uses the timestamp of the map (`"last_mod"`) and that of the resource `"mtime"`.

Unfortunately, the granularity of the two are different (at least on current UNIX systems): for the *last modification* time values from Time::HiRes is used. UNIX resources only use an integer.

**Note**: This needs a bit of consideration from the user's side.

## INTERFACE

### Methods

- **sync\_in**

  *$tm*-\>sync\_in

  This method provides only the main logic, whether a synchronisation from the resource into the in-memory map should occur. If the last modification date of the resource (`"mtime"`) is more recent than that of the map (`"last_mod"`), then synchronisation from the resource to the in-memory map will be triggered. For this, a method `"source_in"` has to exist for the map object; that will be invoked.

  \[Since TM 1.53\]: Any additional parameters are passed through to the underlying `"source_in"` method.

- **sync\_out**

  *$tm*-\>sync\_out

  This method provides the logic, whether synchronisation from the in-memory map towards the attached resource should occur or not. If the last modification date of the map (`"last_mod"`) is more recent than that of the resource (`"mtime"`), then a method `"source_out"` for the object is triggered.

  \[Since TM 1.53\]: Any additional parameters are passed through to the underlying `"source_out"` method.

## SEE ALSO

TM, TM::ResourceAble

## AUTHOR INFORMATION

Copyright 20(0\[6\]\|10), Robert Barta \<drrho@cpan.org\>, All rights reserved.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.  http://www.perl.com/perl/misc/Artistic.html
